【发布时间】:2011-02-25 17:59:26
【问题描述】:
greenlet 包被 gevent 和 eventlet 用于异步 IO。它是作为 C 扩展编写的,因此不适用于 Jython 或 IronPython。如果不关心性能,那么在纯 Python 中实现 greenlet API 的最简单方法是什么。
一个简单的例子:
def test1():
print 12
gr2.switch()
print 34
def test2():
print 56
gr1.switch()
print 78
gr1 = greenlet(test1)
gr2 = greenlet(test2)
gr1.switch()
应该打印 12、56、34(而不是 78)。
【问题讨论】:
-
IronPython 和 Jython 在完全线程化并拥有自己的异步 IO 调用的 VM 上运行 - 你不使用它们吗?
-
最终是的,但我正在考虑在添加 VM 特定版本之前编写一个纯 python 版本。这种形式的流量控制并不完全直观。
-
根据对其中一个答案的评论,您的最终目标是在 IronPython 或 Jython 中使用
eventlet。那是行不通的——不是因为greenlets,而是因为libevent,eventlet封装并依赖于它的事件循环和反应器的C 库。您可以想象在本机 .NET 或 Java 事件循环之上重新实现整个libeventAPI(至少如果您不关心性能,正如您所说的那样),但这是一大堆工作。
标签: python ironpython jython