python generator yield 协程 coroutine
来源:互联网 发布:城市智能交通大数据 编辑:程序博客网 时间:2024/03/28 23:30
参考
生成器
协程
提高:现在还是看不懂
Python “黑魔法” 之 Generator Coroutines
代码分析
#!/usr/bin/env pythonimport timedef 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
如此循环下去。
0 0
- python generator yield 协程 coroutine
- 说说Python中的iterator,yield表达式及generator,coroutine
- 关于线程Thread、协程Coroutine、生成器Generator、yield资料
- Python yield coroutine
- python generator / yield statement
- Python yield expression (generator)
- python中yield generator
- python iterator generator yield
- Python yield and generator
- python yield和generator
- python yield generator
- python yield generator 详解
- python yield generator 详解
- python yield generator 详解
- python yield generator 详解
- Python Yield Generator 详解
- python enhanced generator - coroutine
- python 关于yield, generator, iterable
- (*(volatile unsigned long *) 地址)
- Canvas裁剪和Region、RegionIterator
- Quartz+Spring 分布式定时任务调度(一)- 环境搭建
- 图形视图框架(The QGraphics View Framework)
- scws自定义分词库
- python generator yield 协程 coroutine
- 微信分享功能JS-SDK说明文档
- 文章标题 HDU 1176:免费馅饼 (DP)
- 狗尾巴花
- 在eclipse如何导入.aar包
- 【NOIP2012模拟11.1】骰子游戏
- Git常用命令
- [HDU1011]-Starship Troopers
- mysql 常用命令