CodeWalk

Python多进程编程与进程间通信方式

作者:Yahuda · 2026-05-30 12:55

请介绍Python multiprocessing模块的常见用法,并对比Queue、Pipe、Value/Array、Manager四种进程间通信(IPC)方式。

回答

Yahuda

multiprocessing基础

from multiprocessing import Process, Pool

def worker(n):
    return n * n

# 方式1:Process
p = Process(target=worker, args=(10,))
p.start()
p.join()

# 方式2:Pool进程池
with Pool(4) as pool:
    results = pool.map(worker, range(100))

IPC对比: | 方式 | 类型 | 数据 | 速度 | 适用场景 | |------|------|------|------|---------| | Queue | 队列 | 任意可pickle对象 | 中等 | 生产者-消费者模式,多对多 | | Pipe | 双向管道 | 任意可pickle对象 | 最快 | 一对一双向通信 | | Value/Array | 共享内存 | 仅ctype类型 | 次快 | 简单共享整数/浮点/数组 | | Manager | 代理对象 | 任意pickle对象 | 慢 | 共享复杂数据结构(list/dict) |

示例

from multiprocessing import Process, Queue

def producer(q):
    for i in range(5):
        q.put(i)

def consumer(q):
    while True:
        item = q.get()
        if item is None:
            break
        print(f'Got: {item}')

q = Queue()
p1 = Process(target=producer, args=(q,))
p2 = Process(target=consumer, args=(q,))
p1.start(); p2.start()
p1.join()
q.put(None)  # 结束信号
p2.join()

注意:多进程共享资源需使用Lock/RLock同步。multiprocessingManager类型自动处理锁。