有几个消费者就需要发送几次结束信号
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 %