【generator101】 - pypy的api

从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编码风格的
    原文作者:taowen
    原文地址: https://segmentfault.com/a/1190000000672096
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞