生产者消费模型

enumerate()使用

  • 如果对一个列表,既要遍历索引又要遍历元素时,首先可以这样写:
list1 = ["这", "是", "一个", "测试"]
for i in range (len(list1)):
    print i ,list1[i]
1
2
3
  • 上述方法有些累赘,利用enumerate()会更加直接和优美:
list1 = ["", "", "一个", "测试"]
for index, item in enumerate(list1):
    print index, item
>>>
0 这
12 一个
3 测试
def producer():     #模拟生产包子跟吃包子  一般操作
    ret = []
    for i in range(10000):
        ret.append("包子%s" %i)
    return ret

def consumer(res):
    for index,baozi in enumerate(res):
        print("第%s个人,吃了%s" %(index,baozi))

res = producer()      #并发程序 同时运行
consumer(res)

 

生产者模拟型!

send()也是可以触发yield运行的函数

 

def consumer(name):
    print("%s 准备吃包子啦!" %name)
    while True:
       baozi = yield
       print("包子[%s]来了,被[%s]吃了!" %(name,baozi))
c1 = consumer("dage")
c1.__next__()
c1.send("韭菜馅包子")  #send把“韭菜馅包子”赋值给了yield 然后又赋值给了baozi

 

def consumer(name):           #这个代码块相对于上面的代码不用手动添加包子 而是利用函数自动添加包子
    print("%s 准备吃包子啦!" %name)
    while True:
       baozi = yield
       print("包子[%s]来了,被[%s]吃了!" %(name,baozi))
def producer():
    c1 = consumer("dage")
    c1.__next__()
    c1.send("韭菜馅包子")      #由send函数跳到了consumer函数 完成切换  send就是把值给当前状态停下的yield

producer()
import time
def consumer(name):
    print("%s 准备吃包子啦!" %name)
    while True:
       baozi = yield
       time.sleep(1)
       print("包子[%s]来了,被[%s]吃了!" %(name,baozi))
def producer():
    c1 = consumer("dage")
    c1.__next__()
    for i in range(10):    #不能只做一个包子 要做多个包子的时候就用for循环 而且利用停顿减缓做包子的时间
        time.sleep(1)
        c1.send("包子%s" %i)

producer()

 

posted on 2018-05-08 16:20  monster7  阅读(137)  评论(0编辑  收藏  举报

导航