有几个消费者就需要发送几次结束信号

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 %
 
 
 
 
 
 
 
 
 
 

原文地址:https://www.cnblogs.com/sea-stream/p/14193776.html