#############################
# 在消费者这一端:
#每次获取一个数据 #处理一个数据 #发送一个记号:标志一个数据被处理成功#在生产者这一端: #每一次生成一个数据 #且每一次生产的数据都放在队列中 #在队列中刻上一个记号 #当生产者全部生产完毕之后, #join信号:已经停止生产数据了 #且要等待之前被刻上的记号都被消费完 #当数据都被处理完时,join阻塞结束#consumer 中把所有的任务消耗完#producer端的join感知到,停止阻塞#所有的producer进程结束#主进程中的p.join结束#主进程中代码结束#守护进程(消费者的进程)结束生产者消费者模型.py
1 import random 2 import time 3 from multiprocessing import JoinableQueue, Process 4 5 def consumer(q,name): 6 while True: 7 food = q.get() 8 if food is None: 9 print('%s获取到了一个空',name)10 break11 print('\033[31m%s消费了%s\033[0m' %(name,food))12 time.sleep(random.randint(1,3))13 q.task_done() #count -114 15 def producer(name,food,q):16 for i in range(4):17 time.sleep(random.randint(1,3))18 f = '%s生产了%s%s'%(name,food,i)19 print(f)20 q.put(f) #0 1 ...2021 q.join() #阻塞 直到一个队列中的数据全部被执行完毕22 23 24 if __name__ == '__main__':25 q = JoinableQueue(20)26 p1 = Process(target=producer,args=('Egon','包子',q))27 p2 = Process(target=producer,args=('wusir','泔水',q))28 c1 = Process(target=consumer,args=(q,'alex'))29 c2 = Process(target=consumer,args=(q,'jinboss'))30 p1.start()31 p2.start()32 c1.daemon = True #设置为守护进程 主进程中的代码执行完毕之后,子进程自动结束33 c2.daemon = True34 c1.start()35 c2.start()36 p1.join()37 p2.join() #join()感知一个进程的结束38 q.put(None)