有幾個消費者就需要傳送幾次結束訊號
阿新 • • 發佈:2020-12-26
code
from multiprocessing import Process,Queue import time,random,os def consumer(q): while True: res=q.get() if res is None:break #收到結束訊號則結束 time.sleep(random.randint(1,3)) print('%s吃掉了 %s' %(os.getpid(),res)) def producer(name,q): for i in range(2): time.sleep(random.randint(outputs1,3)) res='%s%s' %(name,i) q.put(res) print('%s生產了 %s' %(os.getpid(),res)) if __name__ == '__main__': q=Queue() #生產者們:即廚師們 p1=Process(target=producer,args=('A',q)) p2=Process(target=producer,args=('B',q)) p3=Process(target=producer,args=('C',q)) #消費者們:即吃貨們 c1=Process(target=consumer,args=(q,)) c2=Process(target=consumer,args=(q,)) #開始 p1.start() p2.start() p3.start() c1.start() c2.start() p1.join() #必須保證生產者全部生產完畢,才應該傳送結束訊號 p2.join() p3.join() q.put(None) #有幾個消費者就應該傳送幾次結束訊號None q.put(None) #傳送結束訊號 print('主')
macname@MacdeMacBook-Pro py % python3 cccccc.py
58516生產了 A0
58518生產了 C0
58516生產了 A1
58517生產了 B0
58517生產了 B1
58519吃掉了 A0
58519吃掉了 A1
58518生產了 C1
58520吃掉了 C0
主
58519吃掉了 B0
58519吃掉了 C1
58520吃掉了 B1
macname@MacdeMacBook-Pro py %