首页 > 其他 > 详细

生产者消费者模型

时间:2020-08-17 22:16:40      阅读:60      评论:0      收藏:0      [点我收藏+]

1.yield:   (1) yield 3 相当于return,控制的是函数的返回值

      (2)x = yield 的另一个特性,接受send传过来的值赋值给x

       举例说明

def test():
    print(开始了)
    first = yield                yield没有返回值,因此运行结果为None
    print(第二次调用,first)
    yield 2
    yield3

t = test()
res = t.__next__()
print(res)
res = t.send(函数停留在first那个位置,我就是给first赋值的)    
print(res)
运行结果:
开始了
None
第二次调用 函数停留在first那个位置,我就是给first赋值的
2

      send()函数的作用是进行下一次迭代(触发迭代器运行),并传入一个值,赋值给yield,此yield为函数停留处的yield,如果不传入一个值会报错

      总结:触发迭代器运行的方法至此有三种 t = test()

          (1)print(t.__next__)

          (2)print(next(t))

          (3)print(t.send(x))

生产者消费者模型:  实现了从A程序跳到B程序,通过while循环语句、yield 以及 send函数实现

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)      调用程序后运行到这一步,c1、c2可以理解为变为迭代器(调用了迭代器函数),(并不会运行函数内的语句)
    c2 = consumer(yuanhao)
    c1.__next__()             此时c1、c2触发迭代(),开始运行函数内的语句,即print(‘我是[%s],我开始吃包子了’%name),然后进入while循环到 yield停止
    c2.__next__()
    for i in range(10):
        time.sleep(1)
        c1.send(包子 %s %i)      此时调用send函数,给yield传入一个值,同时通过baozi = yield将值传给了baozi,并触发迭代,执行第二个print,
        c2.send(包子 %s %i)      此时仍在while死循环中,到yield停止,
                       程序运行到最后,其实是停在了yield处
producer()
运行结果:
我是[wupeiqi],我开始吃包子了
我是[yuanhao],我开始吃包子了
wupeiqi很开心的把[包子 0]吃掉了
yuanhao很开心的把[包子 0]吃掉了
wupeiqi很开心的把[包子 1]吃掉了
yuanhao很开心的把[包子 1]吃掉了
wupeiqi很开心的把[包子 2]吃掉了
yuanhao很开心的把[包子 2]吃掉了
wupeiqi很开心的把[包子 3]吃掉了
yuanhao很开心的把[包子 3]吃掉了
wupeiqi很开心的把[包子 4]吃掉了
yuanhao很开心的把[包子 4]吃掉了
wupeiqi很开心的把[包子 5]吃掉了
yuanhao很开心的把[包子 5]吃掉了
wupeiqi很开心的把[包子 6]吃掉了
yuanhao很开心的把[包子 6]吃掉了
wupeiqi很开心的把[包子 7]吃掉了
yuanhao很开心的把[包子 7]吃掉了
wupeiqi很开心的把[包子 8]吃掉了
yuanhao很开心的把[包子 8]吃掉了
wupeiqi很开心的把[包子 9]吃掉了
yuanhao很开心的把[包子 9]吃掉了

 

      

生产者消费者模型

原文:https://www.cnblogs.com/jgua/p/13519121.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!