CodeWalk

Python多进程multiprocessing模块详解

作者:苦行僧 · 2026-05-30 12:55

请解释Python multiprocessing模块的核心组件:ProcessPoolQueuePipeManager。多进程相比多线程有什么优势?进程间通信(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方式

  1. Queue:线程/进程安全的FIFO队列(基于Pipe+Lock
  2. Pipe:双向/单向通信管道,适合两个进程
  3. Manager:通过代理对象共享数据结构(listdictNamespace等),跨进程自动同步
  4. 共享内存Value/Array(基于mmap

if __name__ == '__main__':Windows无fork,新进程重新导入模块,若不在该保护下会无限递归创建子进程。

注意Process类比threading.ThreadAPI相似但各有"join/start/daemon"。Pool提供mapstarmapapply_async等高级接口。