zoukankan      html  css  js  c++  java
  • python coroutine

    def consumer():
        print(10)
        r = ''
        print(11)
        while True:
            print(12)
            n = yield r
            print(n)
            if not n:
                print(13)
                return
            print('Consumer Consuming %s....' %n)
            r = '200 ok'
    
    def produce(c):
        c.send(None)
        n = 0
        while n < 5 :
            n = n + 1
            print('[PRODUCER] producing %s....' % n)
            r = c.send(n)
            print('[PRODUCER] consumer return %s...' % r)
        c.close()
    
    c = consumer()
    produce(c)

    生产函数中的c.send(None)会跳转入消费者函数,然后这个函数回执行到yield的位置然后将执行权限交还生产者函数。在while循环中再次执行c.send(n)的时候再次回到消费者函数上次停留的地方,并且将n的值通过r传入然后进行消费。

    理解起来有点比起传统思维困难一些。而这就是生成器的运作方式。在单线程中,这种方式非常有效率而且还能达到解耦的效果。

    10
    11
    12
    [PRODUCER] producing 1....
    1
    Consumer Consuming 1....
    12
    [PRODUCER] consumer return 200 ok...
    [PRODUCER] producing 2....
    2
    Consumer Consuming 2....
    12
    [PRODUCER] consumer return 200 ok...
    [PRODUCER] producing 3....
    3
    Consumer Consuming 3....
    12
    [PRODUCER] consumer return 200 ok...
    [PRODUCER] producing 4....
    4
    Consumer Consuming 4....
    12
    [PRODUCER] consumer return 200 ok...
    [PRODUCER] producing 5....
    5
    Consumer Consuming 5....
    12
    [PRODUCER] consumer return 200 ok...

    顺便说下pdb似乎没办法调试这种类型的程序。输入n之后,直接走了。。。。走了。。。。走了。。。。。到了程序的尽头。。。。。。

  • 相关阅读:
    HTML5就是现在:深入了解Polyfills
    dot.js-js模板引擎使用,教程,入门
    js操作dom对象
    JavaScript中this详解
    浅谈JavaScript中的string拥有方法的原因
    函数定义方式
    Jquery的跨域调用
    数据结构与算法之美-排序(下)
    CLR via C#学习笔记-第十三章-定义接口、继承接口
    CLR via C#学习笔记-第十二章-可验证性和约束
  • 原文地址:https://www.cnblogs.com/sunyuw/p/8398630.html
Copyright © 2011-2022 走看看