• 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之后,直接走了。。。。走了。。。。走了。。。。。到了程序的尽头。。。。。。

  • 相关阅读:
    什么是内卷?
    iphone与PC端如何传BUG截图
    java应用服务占用cpu过高,如何优化
    性能测试常见问题FAQ
    性能测试工程师能力进阶三部曲
    jmeter分布式压测试部署
    了解token及分类
    常见端口号及其服务
    2714
    python
  • 原文地址:https://www.cnblogs.com/sunyuw/p/8398630.html
Copyright © 2020-2023  润新知