在PyPy和PyPy + greenlet中无堆叠 - 差异

时间:2012-01-22 11:34:04

标签: python gevent pypy python-stackless greenlets

新版本的PyPy附带了集成的 Stackless 。 据我所知,捆绑的Stackless与2001年的Stackless起源不同。所以主要是带调度程序的绿色线程框架。

Greenlet 是一个自旋Stackless,它提供Stackless绿色线程功能作为扩展模块。

使用来自 PyPy 的“native” Stackless 比使用 PyPy + greenlet +某些调度程序(例如:< em> gevent )?或问题是我不能在PyPy中使用这些类型的扩展?更具体一点:我知道PyPy有自己的greenlet实现(基于 continulet )。但我很好奇在PyPy中将外部greenlet与gevent和内部greenlet连接起来的可能性。

PyPy是否附带了一个用于Stackless的异步IO库而不是标准的?

我知道stackless本身和python的其他异步轻线程扩展(eventlet,gevent,twisted ......)。所以我不是在寻找它们之间的差异,而是通过无堆叠构建来形成pypy的优势。

1 个答案:

答案 0 :(得分:14)

PyPy是否附带了一个用于Stackless的异步IO库而不是标准的?

从PyPy 2.6.1和PyPy3 2.4.0开始,您可以使用asyncio(通过pypi包)替换无堆栈的异步功能

使用PyPy中的“原生”Stackless比使用PyPy + greenlet +某些调度员

有什么好处

在更丰富的Stackless API之外(例如,微线程的腌制),它可以是速度的,因为调度程序是用C编写的运行时的一部分。基准应该使这个显而易见。

有关无Stackless的更多信息,请参阅本文What is Stackless?