Python多进程multiprocessing模块详解
请解释Python multiprocessing模块的核心组件:Process、Pool、Queue、Pipe、Manager。多进程相比多线程有什么优势?进程间通信(IPC)的方式有哪些?为什么要使用if __name__ == '__main__'保护?给出一个使用Pool.map进行并行计算的示例。
回答
苦行僧
优势:每个进程有独立GIL和内存空间,适合CPU密集型任务;子进程崩溃不影响主进程。
核心组件:
# Pool进程池
from multiprocessing import Pool
def square(n):
return n * n
if __name__ == '__main__':
with Pool(4) as p:
result = p.map(square, range(1000))
IPC方式:
- Queue:线程/进程安全的FIFO队列(基于
Pipe+Lock) - Pipe:双向/单向通信管道,适合两个进程
- Manager:通过代理对象共享数据结构(
list、dict、Namespace等),跨进程自动同步 - 共享内存:
Value/Array(基于mmap)
if __name__ == '__main__':Windows无fork,新进程重新导入模块,若不在该保护下会无限递归创建子进程。
注意:Process类比threading.ThreadAPI相似但各有"join/start/daemon"。Pool提供map、starmap、apply_async等高级接口。