进程间通信(IPC)
1.必要性: 进程间空间独立,资源不共享,此时在需要进程间数据传输时就需要特定的手段进行数据通信。
2.常用进程间通信方法:管道通信、消息队列、共享内存、信号量
管道通信(Pipe)
1.通信原理:在内存中开辟管道空间,生成管道操作对象,多个进程使用同一个管道对象进行读写即可实现通信
2.实现方法
from multiprocessing import Pipe
fd1,fd2 = Pipe(duplex = True)
- 功能: 创建管道
- 参数:默认表示双向管道
- 如果为False 表示单向管道
- 返回值:表示管道两端的读写对象
- 如果是双向管道均可读写
- 如果是单向管道fd1只读 fd2只写
fd.recv()
- 功能 : 从管道获取内容
- 返回值:获取到的数据
fd.send(data)
- 功能: 向管道写入内容
- 参数: 要写入的数据
1 from multiprocessing import Process,Pipe 2 import os,time 3 4 # 创建管道对象 5 # False fd1只能recv fd2只能send 6 fd1,fd2 = Pipe(False) 7 8 def read(): 9 while True: 10 data = fd1.recv() # 从管道获取消息 11 print(data) 12 13 def write(): 14 while True: 15 time.sleep(2) 16 fd2.send({'name':'Lily'}) # 向管道发送内容 17 18 r = Process(target=read) 19 w = Process(target=write) 20 r.start() 21 w.start() 22 r.join() 23 w.join()