python课堂整理20----生产者消费者模型

python课堂整理20----生产者消费者模型,第1张

概述一、实现功能:店铺生产包子,消费者来吃 import timedef producter(): ret = [] for i in range(10): time.sleep(0.1) ret.append(‘包子%s‘%i) return retdef consumer(res): for index, ba 一、实现功能:店铺生产包子,消费者来吃
import timedef producter():    ret = []    for i in range(10):        time.sleep(0.1)        ret.append(‘包子%s‘%i)    return retdef consumer(res):    for index,baozi in enumerate(res):        time.sleep(0.1)        print(‘第%s个人吃了%s‘%(index,baozi))a = producter()consumer(a)

弊端:生产包子和吃包子是两个独立的过程,只有生产者把包子做完,消费者才能开始吃 思考:怎么实现两个程序的并发过程

######################################

从生成器入手,因为生成器函数能保留函数的运行状态
def test():    print(‘开始啦‘)    yIEld 0    print(‘第一次‘)    yIEld 1    print(‘第二次‘)    yIEld 2t = test() #只是生成一个生成器函数,并没有执行print(t)res = t.__next__()print(res)

 

♦  send() ①send函数必须传入一个参数,也能触发一次生成器 ②send将传入的参数传递给yIEld,此时再把yIEld赋给一个变量,即保留该参数
def test():    print(‘开始啦‘)    first = yIEld 0   #接受send传过来的值,赋值给first    print(‘第一次‘,first)    yIEld 1    print(‘第二次‘)    yIEld 2t = test() #只是生成一个生成器函数,并没有执行res = t.__next__()print(res)a = t.send(‘我喜欢你‘)print(a)

♦用上述知识实现生产者消费者并发过程
import timedef consumer(name):    print(‘我是%s,我准备吃包子了‘ %name)    while True:        baozi = yIEld        time.sleep(0.1)        print(‘%s开心地把%s吃掉了‘ %(name,baozi))def producter():    c1 = consumer(‘dabai‘)    c1.__next__()    for i in range(10):        time.sleep(0.1)        c1.send(‘包子%s‘ %i)    return ‘吃完了,真开心‘a = producter()print(a)

多人并发过程
import timedef consumer(name):    print(‘我是%s,baozi))def producter():    c1 = consumer(‘dabai‘)    c2 = consumer(‘jinling‘)    c1.__next__()    c2.__next__()    for i in range(10):        time.sleep(0.1)        c1.send(‘包子%s‘ %i)        c2.send(‘包子%s‘ %i)    return ‘吃完了,真开心‘a = producter()print(a)

总结

以上是内存溢出为你收集整理的python课堂整理20----生产者消费者模型全部内容,希望文章能够帮你解决python课堂整理20----生产者消费者模型所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1197837.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存