可以切换输入和输出PyFrameObjects是一个很好的延续实现吗?

Noo*_*bot 6 c python continuations coroutine python-c-api

我对延续感兴趣,特别是在Python的C-API中.根据我的理解,continuation的本质需要不抽象的低级调用约定,以便根据需要操作调用堆栈.我很幸运地遇到了一些散落在这里那里的例子.在我遇到的几个例子中,这个非抽象是使用聪明的C(假设环境)或自定义程序集完成的.

然而,Python的酷处在于它有自己的由PyFrameObjects 组成的解释器堆栈.假设现在使用单线程应用程序,仅仅切换输入和输出PyFrameObjects以在Python的C-API中实现延续是不是足够了?为什么这些作者甚至会为低级别的东西烦恼呢?

Ned*_*der 1

生成器通过操作框架对象的堆栈(实际上是链接列表)来工作。但这只对纯 Python 代码有帮助。如果您的代码运行任何 C 代码,它不会对您有帮助。例如,如果您使用 I/O 例程内的 C 代码,则无法更改 Python 框架对象以使执行转到其他地方。为此,您必须能够更改 C 堆栈。这就是 greenlets 之类的包为你做的事情。