- #!/usr/bin/env python
- # -*- coding:utf-8 -*-
- #Author: caoyf
- from multiprocessing import Process,Pipe,Manager,Lock
- import time
- import random
- # 管道 进程之间创建的一条管道, 默认是全双工模式, 两头都可以进和出,
- # 注意 必须在产生 Process 对象之前产生管道
- # 如果在 Pipe 括号里面填写 False 后就变成了单双工,
- # 左边的只能收, 右边的只能发, recv(接收),send(发送)
- # 如果没有消息可以接收, recv 会一直阻塞, 如果连接的另外一段关闭后,
- #recv 会抛出 EOFError 错误
- # close 关闭连接
- # 下面的实例是在 Pipe 的括号里填写和不填写 False 的区别
- # from multiprocessing import Process,Pipe
- # def func(pro):
- # pro.send('hello')
- # pro.close()
- #
- # if __name__=='__main__':
- # con,pro = Pipe(False)
- # p = Process(target=func,args=(pro,))
- # p.start()
- # print(con.recv())
- # p.join()
- # 模拟 recv 阻塞情况
- # def func(con,pro):
- # con.close()
- # while 1:
- # try:
- # print(pro.recv())
- # except EOFError:
- # pro.close()
- # break
- #
- #
- # if __name__=='__main__':
- # con,pro = Pipe()
- # p = Process(target=func,args=(con,pro,))
- # p.start()
- # pro.close()
- # con.send('aaaaa')
- # con.close()
- # p.join()
- # 利用管道实现生产者和消费者
- # def sc(con,pro,name,food):
- # con.close()
- # for i in range(5):
- # time.sleep(random.random())
- # f = '%s 生产了 %s%s'%(name,food,i)
- # print(f)
- # pro.send(f)
- # def xf(con,pro,name):
- # pro.close()
- # while 1:
- # try:
- # baozi = con.recv()
- # print('%s 消费了 %s'%(name,baozi))
- # except EOFError:
- # break
- # if __name__=='__main__':
- # con,pro = Pipe()
- # p1 = Process(target=sc,args=(con,pro,'caoyf','包子'))
- # c1 = Process(target=xf,args=(con,pro,'zhoaf'))
- # p1.start()
- # c1.start()
- # con.close()
- # pro.close()
- # p1.join()
来源: https://www.cnblogs.com/caoyf1992/p/8687352.html