一、管道的特点及机制
1、对列是基于管道实现的
2、管道是基于socket实现的
3、对列 + 锁 可以实现简便的IPC机制 使得 进程之间数据安全
4、管道 进程之间数据不安全,且存取数据复杂
5、socket + pickle 实现管道
二、简单的锁,代码实现
from multiprocessing import Pipe left,right = Pipe() left.send(1234) print(right.recv())
结果:
1234
三、两种进程实现管道,进程间管道传输数据
from multiprocessing import Pipe,Process def consumer(pipe): print(pipe[1].recv()) if __name__ == '__main__': pipe = Pipe() # print(pipe) Process(target=consumer,args=(pipe,)).start() pipe[0].send(1324)
升级:
from multiprocessing import Pipe,Process def consumer(left,right): left.close() print(right.recv()) if __name__ =='__main__': left,right = Pipe() Process(target=consumer,args=(left,right)).start() left.send(1234)
多进程实现管道
from multiprocessing import Pipe,Process def consumer(left,right): left.close() while True: try: print(right.recv()) except EOFError: break if __name__ =='__main__': left,right = Pipe() Process(target=consumer,args=(left,right)).start() right.close() for i in range(10): left.send('泔水%s'%i) left.close()
多进程实现管道的特点:
1、pipe的端口管理不会随着某一个进程的关闭就关闭
2、操作系统来管理进程对这些端口的使用
3、操作系统管理4个端口,每关闭一个端口计数减1,直到所有的端口都关闭了
4、剩余1个端口的时候 recv就会报错