• python——生产者消费者模型


    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]吃掉了

          

  • 相关阅读:
    PowerDesigner执行SQL生成模型
    IBM,ORACLE 文档
    JAAS 自定义登陆模块
    JAAS 使用windos登陆示例
    IFRAME跨域
    JAVA RSA 数字签名
    JAVA数字证书
    搭模型时常用的numpy公式,不定时更新~
    Failed to connect to github.com port 443: Timed out
    linux和colab上安装torch_geometric踩坑记录,安装过程
  • 原文地址:https://www.cnblogs.com/jgua/p/13519121.html
Copyright © 2020-2023  润新知