1. 程式人生 > 實用技巧 >有幾個消費者就需要傳送幾次結束訊號

有幾個消費者就需要傳送幾次結束訊號

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(
1,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(
'')
outputs
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 %