zoukankan      html  css  js  c++  java
  • python【协程】【基础】

    1. Python对协程的支持是通过generator实现的
    # 生产者send
    # 消费者yield 【yield不但可以返回一个值,它还可以接收调用者发出的参数】
    
    
    def consumer():
        r = ''
        while True:
            n = yield r
            if not n:
                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)
    
    
    
    注意到consumer函数是一个generator,把一个consumer传入produce后:
    首先调用c.send(None)启动生成器;
    然后,一旦生产了东西,通过c.send(n)切换到consumer执行;
    consumer通过yield拿到消息,处理,又通过yield把结果传回;
    produce拿到consumer处理的结果,继续生产下一条消息;
    produce决定不生产了,通过c.close()关闭consumer,整个过程结束。
    整个流程无锁,由一个线程执行,produce和consumer协作完成任务,所以称为“协程”,而非线程的抢占式多任务。
    
  • 相关阅读:
    51nod乘积之和
    Dell服务器安装OpenManage(OMSA)
    Nginx反向代理PHP
    搭建haproxy
    108. Convert Sorted Array to Binary Search Tree
    60. Permutation Sequence
    142. Linked List Cycle II
    129. Sum Root to Leaf Numbers
    118. Pascal's Triangle
    26. Remove Duplicates from Sorted Array
  • 原文地址:https://www.cnblogs.com/amize/p/15194041.html
Copyright © 2011-2022 走看看