在网上看到的资料中以单向通信的案例为主,一端作为接收端,一端作为发送端。 为了测试pipe的全双工通信,写了下面的案例。从面的案例可以看到管道的两端都是可读可写的。
#!/usr/bin/python3 # -*- coding: utf-8 -*- import multiprocessing, time def consumer(pipe): conn1,conn2 = pipe conn2.close() while True: # 首先做消费者 try: item = conn1.recv() if item == None: break print("cons消费:",item) except EOFError: break for item in range(10,20): # 然后转为生产者 print('cons生产:',item) conn1.send(item) conn1.close() # 生产完毕关闭 def producer(pipe): conn1,conn2 = pipe conn1.close() for item in range(10): # 首先做为生产者 print('prod生产:',item) conn2.send(item) conn2.send(None) # 发送一个信号 while True: # 变为消费者 try: item = conn2.recv() print("prod消费:",item) except EOFError: break if __name__ == '__main__': conn1,conn2 = multiprocessing.Pipe() cons_p = multiprocessing.Process(target=consumer,args=((conn1,conn2),)) cons_p.start() producer((conn1,conn2)) cons_p.join()