只用 Python 的 yield 关键字, 如何实现一个协程或用户态函数(生成器)调度器?
关于协程 sleep 实现想了好久, idea 来源于 Python 社区的一个大牛, 当时看过一遍, 现在想的比较清楚就写出来了–
https://gist.github.com/Petelin/1835fe063c38c01cf10a141736d14a9b <button onclick="lazyGist(this)"> 显示 Gist 代码 </button>
只用 Python 的 yield 关键字, 如何实现一个协程或用户态函数(生成器)调度器?
8 回复
最后有一个 tcp server 的实现, 类似于 gevent 的并发,在 handler 里写 sleep 不会被阻塞
lz 应该是看了这个吧,代码思路最后一部分一样。
David Beazley - Python Concurrency From the Ground Up: LIVE! - PyCon 2015
<iframe src="https://www.youtube.com/embed/MCs5OvhV9S4" class="embedded_video" allowfullscreen="" type="text/html" id="ytplayer" frameborder="0"></iframe>
核心就是用 poll 做异步定时器~ 和 yield 没多大关系吧。lz 可以看看 tornado 的 sleep 实现
这种写法的初衷是解决多任务(concurrency),poll/select 控制异步调度,yield 实现多任务。
好的,我去看看,也不是异步定时器,而是异步通知,yield 正如 czheo 说的,是多任务,没有多任务,写出来的也只是 event loop 而已。
应该是有一个 PPT,从 yield 开始讲的。基本都是从他那学的。关于 sleep 部分实现是我想的。
粗看了下 eventlet 的做法差不多…用 yield 写起来太别扭了才有 greenlet


