多进程并行
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 |
| 高并发网络 IO | asyncio(首选) |