用python生成器实现单线程并发(做包子和吃包子)追加一种多线程队列实现并发

#第一种方法:单线程单过程,要等包子全部做好之后才能一个一个的吃
import time
def produce_baozi():
    res=[]
    for i in range(1,21):
        time.sleep(0.2)
        res.append("包子%s"%i)
    return res
def consume_baozi(x):
    for index,baozi in enumerate(x):
        time.sleep(0.1)
        print("第%s个人吃了%s"%(index+1,baozi))
ret=produce_baozi()
consume_baozi(ret)

#第二种方法:单线程并发,包子边做边吃
import time
def produce_baozi():
    global i
    for i in range(1,21):
        time.sleep(1)
        yield i
        print("第%s个包子做好了"%i)
        consume_baozi()
def consume_baozi():
    global i
    time.sleep(1)
    print("第%s个人吃了第%s个包子"%(i,i))
res=produce_baozi()
while True:
    try:
       res.__next__()
    except StopIteration:
        break

多线程队列实现并发
生产者一共生产12个包子,三个消费者没人吃4个,边做边吃

import time
import threading         #线程模块
import queue             #队列模块
q=queue.Queue(10)        #创建一个队列对象,允许放10个数据,不限类型
# print("bug")
def produce_baozi(name):
    for i in range(1,13):
        time.sleep(1)
        print("%s的第%s个包子做好了" % (name,i))
        q.put(i)
        q.task_done()     #线程间通信
def consume_baozi(name):
    for i in range(1, 5):
        q.join()          #如果通信线程没有执行q.task_done(),该线程则会阻塞
        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()
c1.join()
c2.join()
c3.join()
p1.join()
print("end...")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值