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

一、实现功能:店铺生产包子,消费者来吃

import time

def producter():

ret = []

for i in range(10):

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))

a = producter()

consumer(a)

弊端:生产包子和吃包子是两个独立的过程,只有生产者把包子做完,消费者才能开始吃

思考:怎么实现两个程序的并发过程

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

从生成器入手,因为生成器函数能保留函数的运行状态

def test():

print(‘开始啦‘)

yield 0

print(‘第一次‘)

yield 1

print(‘第二次‘)

yield 2

t = 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 2

t = test() #只是生成一个生成器函数,并没有执行

res = t.__next__()

print(res)

a = t.send(‘我喜欢你‘)

print(a)

♦用上述知识实现生产者消费者并发过程

import time

def 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 time

def consumer(name):

print(‘我是%s,我准备吃包子了‘ %name)

while True:

baozi = yield

time.sleep(0.1)

print(‘%s开心地把%s吃掉了‘ %(name, 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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值