from multiprocessing import Process,JoinableQueue
import time
import random
import os
def consumer(q):
while True:
res=q.get()
time.sleep(random.randint(1,3))
print('%s 吃了 %s' % (os.getpid(), res))
q.task_done()
def product_baozi(q):
for i in range(3):
time.sleep(2)
res='包子%s' %i
q.put(res)
print('%s 制造了 %s' %(os.getpid(),res))
q.join()
def product_gutou(q):
for i in range(3):
time.sleep(2)
res='骨头%s' %i
q.put(res)
print('%s 制造了 %s' %(os.getpid(),res))
q.join()
def product_ganshui(q):
for i in range(3):
time.sleep(2)
res='泔水%s' %i
q.put(res)
print('%s 制造了 %s' %(os.getpid(),res))
q.join()
if __name__ == '__main__':
q=JoinableQueue()
#生产者们:厨师们
p1=Process(target=product_baozi,args=(q,))
p2=Process(target=product_gutou,args=(q,))
p3=Process(target=product_ganshui,args=(q,))
#消费者们:吃货们
p4=Process(target=consumer,args=(q,))
p5=Process(target=consumer,args=(q,))
p4.daemon=True
p5.daemon=True
#设置为守护进程,在主线程停止时p也停止,但是不用担心,producer内调用q.join保证了consumer已经处理完队列中的所有元素
p_l=[p1,p2,p3,p4,p5]
for p in p_l:
p.start()
p1.join()
p2.join()
p3.join()
print('主')