python generator yield 协程 coroutine
2016-08-18 15:11
323 查看
参考
生成器协程
提高:现在还是看不懂
Python “黑魔法” 之 Generator Coroutines
代码分析
#!/usr/bin/env python import time def consumer(): r = '' while True: n = yield r print '[CONSUMER] Consuming ', n time.sleep(1) r = '200 OK' def produce(c): print 'c.next:', c.next() n = 0 while n < 5: n += 1 print '[PRODUCER] Producing ', n r = c.send(n) print '[PRODUCER] Consumer return: ', r c.close() if __name__ == '__main__': c = consumer() produce(c)
输出:
c.next: [PRODUCER] Producing 1 [CONSUMER] Consuming 1 [PRODUCER] Consumer return: 200 OK [PRODUCER] Producing 2 [CONSUMER] Consuming 2 [PRODUCER] Consumer return: 200 OK [PRODUCER] Producing 3 [CONSUMER] Consuming 3 [PRODUCER] Consumer return: 200 OK [PRODUCER] Producing 4 [CONSUMER] Consuming 4 [PRODUCER] Consumer return: 200 OK [PRODUCER] Producing 5 [CONSUMER] Consuming 5 [PRODUCER] Consumer return: 200 OK
从main开始,首先是生成器实例化
c = consumer()
然后把这个生成器作为参数扔到produce函数里。
c.next()先执行第一遍的consumer。一直到遇上yield,yield把r返回给调用者。但是对consumer而言,只是将r返回了,n还没接收到东西(没接收到produce的send)
r = '' while True: n = yield r
在这里,其实给c.next()返回了一个空字符串r,produce函数接收到空字符串后将其输出。
在produce函数继续执行,输出
[PRODUCER] Producing 1
然后给cosumer发送了n=1
r = c.send(n)
consumer获得了1
n = yield r
将其输出
[CONSUMER] Consuming 1
然后consumer休眠1秒,然后将r赋值,再循环,执行到yield,给produce函数返回了
r = '200 OK'
produce函数接收到回复r,将r打印出来
[PRODUCER] Consumer return: 200 OK
如此循环下去。
相关文章推荐
- python yield generator (迭代器 生成器 协程) 理解
- 说说Python中的iterator,yield表达式及generator,coroutine
- Python yield expression (generator)
- Pythonic (二 yield上, Generator)
- python iterator generator yield
- python中的generator(coroutine)浅析和应用
- python yield和generator
- python的协程和并发-使用yield实现并有使用详解
- Python - 协程 - Gevent - yield
- Python 学习-yield 用法和协程
- Python:用generator构造树和遍历(探究yield和yield from)
- Python中协程(Coroutine)的使用和注意点
- python 新东东 协程(yield与这个概念有关)
- python 关于yield, generator, iterable
- 关于Python生成器(Generator的yield、next、send)
- python语法31[iterator和generator+yield]
- python语法31[iterator和generator+yield]
- python generator / yield statement
- Python中closure和generator的定义和使用 (兼谈yield命令)
- Python的yield协程机制实现生产者-消费者模式