我真的很佩服 Stackless Python 的功能,我一直在寻找一种方法来模拟它的语法,同时仍然使用标准的 Python 3 解释器。Alex J. Champandard 在 gamedev 博客中的一篇文章使 greenlet 库看起来可以提供此功能。我稍微修改了他的代码,但我能想到的最好的临时 tasklet 包装器是一个在变量中包含一个 greenlet 的类,如下所示:
class tasklet():
def __init__(self,function=None,*variables):
global _scheduled
self.greenlet = greenlet.greenlet(function,None)
self.functioncall = function # Redundant backup
self.variables = variables
_scheduled.append(self)
self.blocked = False
switch()
然后,该函数通过在调用其方法时将变量传递给 greenlet 来模拟 Stackless 的调度。
到目前为止,这似乎可行,但我希望能够以原始的 Stackless 语法调用 tasklet,例如tasklet(function)(*args)
,与当前的语法相反tasklet(function,*args)
。我不确定在哪里查看文档以了解如何完成此操作。这是否可能,或者它是 Stackless 对解释器的更改的一部分?