python中的`multiprocessing`模块
在Python中,multiprocessing
模块是用于实现多进程并行计算的核心库。以下是简明笔记:
核心概念
-
进程 vs 线程
- 进程:独立内存空间,操作系统直接调度,适合CPU密集型任务
- 线程:共享内存空间,受GIL限制,适合I/O密集型任务
-
GIL问题
- Python全局解释器锁(GIL)限制多线程并行效率
multiprocessing
通过创建独立进程绕过GIL限制
核心作用
- 并行计算:利用多核CPU加速计算
- 隔离内存:进程崩溃不影响主程序
- 替代多线程:解决CPU密集型任务的并行瓶颈
核心组件
组件 | 作用 | 示例 |
---|---|---|
Process |
创建子进程 | p = Process(target=func) |
Pool |
进程池管理 | pool = Pool(processes=4) |
Queue |
进程间通信 | q = Queue(); q.put(data) |
Pipe |
双向通信管道 | parent_conn, child_conn = Pipe() |
Lock |
进程同步锁 | lock = Lock(); lock.acquire() |
经典示例
import multiprocessing as mp
def square(x):
return x * x
if __name__ == '__main__': # ⚠️ Windows必须加此保护
# 方法1: 直接创建进程
p = mp.Process(target=square, args=(5,))
p.start()
p.join()
# 方法2: 使用进程池 (推荐)
with mp.Pool(4) as pool: # 创建4个进程
results = pool.map(square, [1, 2, 3, 4, 5])
print(results) # [1, 4, 9, 16, 25]
关键注意事项
-
跨平台兼容
- Windows需
if __name__ == '__main__'
避免递归创建进程 - Linux/macOS可直接使用
- Windows需
-
进程间通信(IPC)
- 优先用
Queue
代替共享内存 - 大数据传输用
Manager
代理
- 优先用
-
资源开销
- 进程创建比线程慢10-100倍
- 适合长任务,短任务用线程池更高效
典型应用场景
- 科学计算/数值模拟
- 批量图片/视频处理
- 机器学习模型训练
- 大规模数据转换
📌 面试重点:对比
multiprocessing
vsthreading
,解释GIL影响,进程间通信方式选择