Z
ZHANK
并发编程

多进程并行

Process/Pool、Queue 通信、Pipe、共享内存、绕过 GIL

多进程并行

multiprocessing 绕过 GIL——每个进程有独立的 Python 解释器,真正并行执行 CPU 密集型任务。

学完本章你将: 掌握 Process/Pool、Queue 通信、共享内存。


创建进程

python
import multiprocessing

def cpu_task(n):
    total = sum(i * i for i in range(n))
    print(f"计算结果: {total}")
    return total

if __name__ == "__main__":
    p = multiprocessing.Process(target=cpu_task, args=(10_000_000,))
    p.start()
    p.join()

进程池 Pool

python
from multiprocessing import Pool

def square(x):
    return x * x

if __name__ == "__main__":
    with Pool(processes=4) as pool:
        results = pool.map(square, range(10))
        print(results)  # [0, 1, 4, 9, ..., 81]

        # 异步版本
        async_result = pool.map_async(square, range(100))
        results = async_result.get()

进程间通信

python
# 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"收到: {item}")

if __name__ == "__main__":
    q = multiprocessing.Queue()
    p1 = multiprocessing.Process(target=producer, args=(q,))
    p2 = multiprocessing.Process(target=consumer, args=(q,))
    p1.start(); p2.start()
    p1.join(); q.put(None); p2.join()

选择指南

场景方案
IO 密集型threading / asyncio
CPU 密集型multiprocessing
高并发网络 IOasyncio(首选)