Python的生成器3-生产者消费者模型

本文通过生产包子和吃包子的比喻,介绍了Python中yield关键字的使用,以及如何利用协程实现单线程下的并发生产与消费模型。通过具体代码示例,展示了生产者和消费者模式在实际编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

生产包子吃包子

第一种方法

生产包子

import time
def producer():
    ret=[]
    for i in range(100):
        #time.sleep(0.1)
        ret.append('包子%s'%i)

return ret #吃包子

def consumer(res):
    for index,baozi in enumerate(res):
        #time.sleep(0.1)
        print('第%s个人,吃了%s'%(index,baozi))
res=producer()
consumer(res)

在这里插入图片描述

yield相当于return :控制函数的返回值

yield另外特性就是:接收send穿回来的返回值,赋值给x

def test1():
    print('开始啦')
    first=yield 1  #return = 1   first = None
    print('第一次',first)
    yield 2
    print('第二次')
t=test1()
res=t.__next__()  #next(t)
print(res)
		#t.__next__()《====》t.send(None)#结果相同,
res=t.send('函数停留在first那个位置,我就是给first赋值的')
print(res)

在这里插入图片描述

吃包子

def consumer(name):
    print('我是[%s],我准备开始吃包子' %name)
    while True:
        baozi=yield
        print('%s 很开心吧[%s]吃掉了' %(name,baozi))
    # for index,baozi in enumerate(res):
    #     #time.sleep(0.1)
    #     print('第%s个人,吃了%s'%(index,baozi))

c1=consumer('lzp')
c1.__next__()
c1.send('羊肉包子')

在这里插入图片描述

## 3.单线程-并发 生产包子吃包子(最终版本)

import time
#吃包子
def consumer(name):#消费者
    print('我是[%s],我准备开始吃包子' %name)
    while True:
        baozi=yield
        time.sleep(1)
        print('%s 很开心吧[%s]吃掉了' %(name,baozi))
def producer():#生产者
    c1=consumer('lzp')#产生吃货
    c2=consumer('wjs')
    c1.__next__()
    c2.__next__()
    for i in range(10):
        time.sleep(1)
        c1.send('羊肉包子%s' %i)
        c2.send('羊肉包子%s' %i)
producer()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值