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----生产者消费者模型所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)