):
16 for i in range(10):
17 # time.sleep(random.randint(1,3))
18 time.sleep(random.random())
19 res='%s%s' %(name,i)
20 q.put(res)
21 print('\033[44m%s 生产了 %s\033[0m' %(os.getpid(),res))
22 print('%s生产结束'%name)
23 q.join() # 生产完毕,使用此方法进行阻塞,直到队列中所有项目均被处理。
24 print('%s生产结束~~~~~~'%name)
25
26
27 if __name__ == '__main__':
28 q=JoinableQueue()
29 # 生产者们:即厨师们
30 p1=Process(target=producer,args=('包子',q))
31 p2=Process(target=producer,args=('骨头',q))
32 p3=Process(target=producer,args=('泔水',q))
33
34 # 消费者们:即吃货们
35 c1=Process(target=consumer,args=(q,))
36 c2=Process(target=consumer,args=(q,))
37 c1.daemon=True
38 c2.daemon=True
39 # 如果不加守护,那么主进程结束不了,但是加了守护之后,必须确保生产者的内容生产完并且被处理完了,所有必须还要在主进程给生产者设置join,才能确保生产者生产的任务被执行完了,并且能够确保守护进程在所有任务执行完成之后才随着主进程的结束而结束。
40
41 # 开始
42 p_l=[p1,p2,p3,c1,c2]
43 for p in p_l:
44 p.start()
45
46 p1.join() # 我要确保你的生产者进程结束了,生产者进程的结束标志着你生产的所有的人任务都已经被处理完了
47 p2.join()
48 p3.join()
49 print('主程序')
稍复杂示例参考
|