解锁 Python 进程间通信:Queue、Pipe 与共享内存实战指南
在多核时代,充分利用 CPU 并行能力已成主流。Python 虽有全局解释器锁(GIL),但借助多进程(multiprocessing
)模块,我们仍能在子进程之间安全、高效地交换数据。本文带你掌握至少三种常见 IPC(Inter-Process Communication,进程间通信)方案,并通过示例对比优缺点,帮助你快速上手实战应用。
一、为何需要进程间通信(IPC)?
多进程可绕过 GIL 限制,实现真正并行计算。但进程间内存空间隔离,直接访问变量会报错。
IPC 就是为了解决这一“隔离与共享”的矛盾,让多个进程协作完成复杂任务。常见场景包括:
- 分布式任务调度:Worker 之间交换任务与结果
- 数据管道处理:流水线式处理大文件、流式数据
- 实时监控:采集进程将指标推送给分析进程
本文将依次介绍:
multiprocessing.Queue
multiprocessing.Pipe
- 共享内存(
multiprocessing.shared_memory
&Value
/Array
) Manager
代理对象- 基于 Socket 的自定义 IPC
二、方案一:multiprocessing.Queue
原理
Queue
基于管道(pipe)与锁(mutex),内部维护一个线程/进程安全的队列结构。适合多生产者-多消费者模式。
代码示例
from multiprocessing import Process, Queue
import time
def producer(q, n):
for i in range(n):
print(f"生产:{
i}")
q.put(i)
time.sleep(0.1)
def consumer(q, n):
for _ in range(n):
val = q.get()
print(f"消费:{
val}")
if __name__ == "__main__":
q = Queue()
p = Process(target=producer, args=(q, 5))
c = Process(target=consumer, args=(q, 5