之前写过一个
用python生成器实现单线程并发(做包子和吃包子)
参看https://blog.csdn.net/csdniter/article/details/90723175
现在用多线程队列再实现一下:
import time import threading #线程模块 import queue #队列模块 q=queue.Queue(10) #创建一个队列对象,允许放10个数据,不限类型 def produce_baozi(name): for i in range(1,11): time.sleep(1) print("%s的第%s个包子做好了" % (name,i)) q.put(i) q.task_done() #线程间通信 def consume_baozi(name): for i in range(1, 11): q.join() date=q.get() time.sleep(1) print("%s吃了第%s个包子"%(name,date)) p1=threading.Thread(target=produce_baozi,args=("p1",)) c2=threading.Thread(target=consume_baozi,args=("c2",)) c3=threading.Thread(target=consume_baozi,args=("c3",)) c1=threading.Thread(target=consume_baozi,args=("c1",)) c1.start() c2.start() c3.start() p1.start()
一个输出:
p1的第1个包子做好了 p1的第2个包子做好了 c1吃了第1个包子 c2吃了第2个包子 p1的第3个包子做好了 c3吃了第3个包子 p1的第4个包子做好了 p1的第5个包子做好了 c1吃了第4个包子 p1的第6个包子做好了 c1吃了第5个包子 c1吃了第6个包子 p1的第7个包子做好了 c2吃了第7个包子 p1的第8个包子做好了 p1的第9个包子做好了 c3吃了第8个包子 p1的第10个包子做好了 c1吃了第9个包子 c2吃了第10个包子
文章来源: https://blog.csdn.net/csdniter/article/details/92018982