由于进程空间相对独立,资源无法共享,基于这种情况,就需要使用一些方法使得不同的进程之间可以进行通信。
我这里介绍三种进程间通信的方式:管道、消息队列、共享内存。
管道
管道的通信原理:
- 在内存中开辟管道空间,生成管道操作对象,多个进程使用"同一个"管道对象进行操作即可实现通信
代码实现:
from multiprocessing import Process,Pipe
#创建管道对象
fd1,fd2 = Pipe(duplex = False)
def test(msg):
#向管道写入内容
fd2.send(msg)
jobs = []
for i in range(5):
msg = "No." + str(i)
p = Process(target = test, args = (msg,))
jobs.append(p)
p.start()
for i in range(5):
#读取管道
data = fd1.recv()
print(data)
# 回收进程
for i in jobs:
i.join()
其中:
fd1, fd2 = Pipe(duplex = True)
- 功能:创建管道
- 参数(duplex):默认为True表示双向管道,如果设置为False则为单向管道
- 返回值:表示管道的两端,如果是双向管道,都可以读写,如果是单向管道,则fd1只读,fd2只写
fd.send(data)
- 功能:向管道写入内容
- 参数:要写入的内容(可以发送python数据类型)
fd.recv()
- 功能:从管道读取内容
- 返回值:读取到的内容
- 如果管道为空则阻塞