从generator到greenlet到stackless再到pypy,各家的语法都不太一样。pypy底层的实现是continulet,看名字应该是continuation的意思。然后在这个基础上实现了stackless的api和greenlet的api。这种实现都是在用户代码里,而不是在解释器的内置库里实现的。
from _continuation import continulet
def func(cont, a, b):
print(a)
cont.switch()
print(b)
cont = continulet(func, 'hello', 'world')
cont.switch()
print('switched from continulet')
cont.switch()
代码的输出是
hello
switched from continulet
world
从使用的感觉上非常类似于greenlet。感觉就是把greenlet隐式的当前greenlet的概念变成了显式的第一个函数参数。Java的quasar的语法风格也是类似: http://docs.paralleluniverse.co/quasar/
所以从语法上来说就三类
- generator这样强制要求yield的
- greenlet为代表的隐式yield控制权的
- stackless为代表强买强卖actor编码风格的
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。