生产者消费者模型

import time
def producer(): #生产包子函数
ret=[]
for i in range(5):
time.sleep(0.1)
ret.append('包子%s' %i)
return ret

def consumer(res): #吃包子函数
for index,baozi in enumerate(res): #通过enumerate()函数获取索引跟对应的值
time.sleep(0.1)
print('第%s个人,吃了%s' %(index,baozi))

res=producer()
consumer(res)
"D:\pycharm new project\venv\Scripts\python.exe" "D:/pycharm new project/01"
第0个人,吃了包子0
第1个人,吃了包子1
第2个人,吃了包子2
第3个人,吃了包子3
第4个人,吃了包子4

def test():
print('开始啦')
yield 1
print('第一次')
yield 2
t=test()
res=t.__next__() #next(t) 这是触发生成器的两种方式,下面有第三种
print(res)
"D:\pycharm new project\venv\Scripts\python.exe" "D:/pycharm new project/01"
开始啦
1

#yield 相当于return 控制的是函数的返回值
#x=yield的另外一个特性,接受send传过来的值,赋值给x
def test():
print('开始啦')
firt=yield 1 #return 1 first=None
print('第一次',firt)
yield 2
print('第二次')

t=test()
t.__next__() 开始走,打印开始啦,
res=t.send(None) 你讲自己传进去的值,传给yield,又传给first
print(res)
"D:\pycharm new project\venv\Scripts\python.exe" "D:/pycharm new project/01"
开始啦
第一次 None
2

def test():
print('开始啦')
firt=yield #return 1 first=None
print('第一次',firt)
yield 2
print('第二次')

t=test()
res=t.__next__() #next(t)
print(res)
res=t.send('函数停留在first那个位置,我就是给first赋值的')
print(res)

"D:\pycharm new project\venv\Scripts\python.exe" "D:/pycharm new project/01"
开始啦 第一次运行函数打印处理啊的
None 因为函数没有返回值,则给了None
第一次 函数停留在first那个位置,我就是给first赋值的 将seed传的值放进去
2


生产者消费者模型
import time
def consumer(name):
print('我是[%s],我准备开始吃包子了' %name)
while True:
baozi=yield
time.sleep(1)
print('%s 很开心的把【%s】吃掉了' %(name,baozi))

def producer():
c1=consumer('wupeiqi')
c2=consumer('yuanhao_SB')
c1.__next__()
c2.__next__()
for i in range(3):
time.sleep(1)
c1.send('包子 %s' %i)
c2.send('包子 %s' %i)
producer()
"D:\pycharm new project\venv\Scripts\python.exe" "D:/pycharm new project/01"
我是[wupeiqi],我准备开始吃包子了
我是[yuanhao_SB],我准备开始吃包子了
wupeiqi 很开心的把【包子 0】吃掉了
yuanhao_SB 很开心的把【包子 0】吃掉了
wupeiqi 很开心的把【包子 1】吃掉了
yuanhao_SB 很开心的把【包子 1】吃掉了
wupeiqi 很开心的把【包子 2】吃掉了
yuanhao_SB 很开心的把【包子 2】吃掉了

posted @ 2018-05-05 20:00  夏天的麦田  阅读(89)  评论(0)    收藏  举报