管道
from multiprocessing import Pipe,Process def func(conn1): while True: msg = conn1.recv() if msg is None: break print(msg) if __name__ == '__main__': conn1,conn2 = Pipe() Process(target=func,args=(conn1,)).start() for i in range(10): conn2.send('吃了吗%d'%i) conn2.send(None)
from multiprocessing import Pipe,Process def func(conn1,conn2): conn2.close() while True: try: msg = conn1.recv() print(msg) except EOFError: conn1.close() break if __name__ == '__main__': conn1,conn2 = Pipe() Process(target=func,args=(conn1,conn2)).start() conn1.close() for i in range(10): conn2.send('吃了吗%d'%i) conn2.close()
from multiprocessing import Pipe,Process import time,random def producer(con,pro,name,food): con.close() for i in range(4): time.sleep(random.random()) f = '%s生产%s%d'%(name,food,i) print(f) pro.send(f) pro.close() def consumer(con,pro,name): pro.close() while True: try: f = con.recv() print('%s吃了%s'%(name,f)) time.sleep(random.random()) except EOFError: con.close() break if __name__ == '__main__': con,pro = Pipe() p = Process(target=producer,args=(con,pro,'alex','泔水')) c = Process(target=consumer,args=(con,pro,'jin')) p.start() c.start() con.close() pro.close()
from multiprocessing import Pipe,Process,Lock import time,random def producer(con,pro,n): con.close() for i in range(n): pro.send(i) pro.send(None) pro.send(None) pro.close() def consumer(con,pro,name,lock): pro.close() while True: lock.acquire() baozi= con.recv() lock.release() if baozi: print('%s收到包子%d'%(name,baozi)) else: con.close() break if __name__ == '__main__': con,pro = Pipe() lock = Lock() p = Process(target=producer,args=(con,pro,30)) c = Process(target=consumer,args=(con,pro,'c',lock)) c2 = Process(target=consumer,args=(con,pro,'c2',lock)) p.start() c.start() c2.start() con.close() pro.close()