我们正在广泛使用Twisted来处理需要大量异步io的应用程序。在某些情况下,东西是cpu绑定的,为此我们产生了一个进程池来完成工作,并有一个系统来管理多个服务器上的这些 - 所有这些都是在Twisted中完成的。效果很好。问题是很难让新团队成员加快速度。在Twisted中编写异步代码需要近乎垂直的学习曲线。就好像人类自然不会那么想。
我们正在考虑采用混合方法。也许保持xmlrpc服务器部分和进程管理在Twisted中并在代码中实现其他东西,至少在某种程度上看起来是同步的,而不是这样。然后我又喜欢明确的隐含,所以我不得不考虑更多。无论如何,在greenlets上 - 这些东西有多好用?所以有Stackless,你可以从我的Gallentean头像中看到,我很清楚它在第一手使用CCP的旗舰EVE Online游戏方面取得了巨大的成功。那么Eventlet或gevent呢?好吧现在只有Eventlet与Twisted一起使用。然而gevent声称速度更快,因为它不是纯粹的python实现,而是依赖于libevent。它还声称具有较少的特性和缺陷。 gevent据我所知,它由1个人维护。这让我有点怀疑,但是所有伟大的项目都是这样开始的......那么PyPy - 我还没有读完那个 - 只是在这个帖子中看到了它:Drawbacks of Stackless。< / p>
如此令人困惑 - 我想知道该怎么做 - 听起来像Eventlet可能是最好的选择,但它真的足够稳定吗?那里的任何人有经验吗?我们应该选择Stackless,因为它已经存在并且是经过验证的技术 - 就像Twisted一样 - 并且它们可以很好地协同工作。但我仍然不愿意使用单独的Python版本来完成这项工作。该怎么做....
这篇有点令人讨厌的博客文章对我来说很突出:Asynchronous IO for Grownups我不认为Twisted就像Java一样对我来说Java通常是你处于线程思维的地方但无论如何。然而,如果那个猴子补丁的东西真的像那样工作那么哇。哇哇!
答案 0 :(得分:28)
您可能需要查看:
Eventlet和gevent与Stackless并不具有可比性,因为Stackless附带了一个不知道tasklet的标准库。有socket for Stackless的实现,但没有像gevent.monkey那样全面的内容。 CCP不使用裸骨Stackless,它有一个叫做Stackless I / O的东西,AFAIK只是windows,而且从来没有开源(?)。
可以使eventlet和gevent在Stackless上运行而不是在greenlet上运行。在某些时候,我们甚至试图以GSoC project的方式做到这一点,但没有找到学生。
答案 1 :(得分:4)
回答你问题的一部分 - 如果你看http://speed.pypy.org,你会发现在PyPy上使用扭曲可以给你一些加速。这当然取决于您的工作量,但可能值得一试。
干杯,
fijal
答案 2 :(得分:0)
我在eventlet和repoze.bfg之上构建了一个小实时Web应用程序(我很久以前就放弃了django)。我发现eventlet和猴子修补就像Ted所说的一样容易。
答案 3 :(得分:0)