Eventlet或gevent或Stackless + Twisted,Pylons,Django和SQL Alchemy

我们正在广泛使用Twisted来为需要大量asynchronousIO的应用程序。 有些情况下,cpu绑定的东西,为此,我们产生了一个进程池来完成这项工作,并有一个系统来pipe理这些跨多个服务器 – 所有在Twisted中完成。 很好用。 问题是很难让新的团队成员加快速度。 在Twisted中编写asynchronous代码需要接近垂直的学习曲线。 就好像人类自然不会这么想。

我们也许正在考虑一个混合的方法。 也许将xmlrpc服务器部分和进程pipe理保存在Twisted中,并且至less在一定程度上看起来同步的代码中实现其他东西,而不是这样。 然后我又喜欢显式的隐含,所以我不得不多思考这个问题。 无论如何上greenlets – 这种东西有多好? 所以有Stackless,就像你从Gallentean头像中看到的那样,我很清楚它在第一手中共旗舰EVE在线游戏中的巨大成功。 那么Eventlet或gevent呢? 那么现在只有Eventlet可以和Twisted一起使用。 然而gevent声称更快,因为它不是纯粹的python实现,而是依赖于libevent。 它还声称有较less的特质和缺陷。 gevent据我所知,它由1个人维护。 这让我有些le然心动,但所有伟大的项目都是以这种方式开始的……所以有PyPy–我甚至还没有完成关于这个的阅读 – 只是在这个线程中看到: Stackless的缺点 。

所以令人困惑 – 我想知道做什么 – 听起来像Eventlet可能是最好的select,但它是否足够稳定? 有谁在那里有任何经验呢? 我们是否应该selectStackless,而且它已经被certificate是技术 – 就像Twisted一样 – 而且它们确实很好地协同工作。 但是我仍然不希望有一个独立的Python版本来做到这一点。 该怎么办….

这个有点令人讨厌的博客条目为我打了头:虽然asynchronousIO成年人我不明白Twisted是像Java一样对我来说,Java通常是在线程的思维方式,但无论如何。 不过,如果那个猴子补丁的东西真的有效,那么哇。 哇!

你可能想看看:

  • 比较gevent和eventlet
  • 来自用户从twisted或者eventlet移动到gevent的报告

Eventlet和gevent与Stackless并没有真正的可比性,因为Stackless提供了一个不知道tasklets的标准库。 有Stackless的实现,但没有像gevent.monkey那么全面。 中共不使用裸骨头Stackless,它有一个叫Stackless I / O,AFAIK是只有Windows,并从来没有开源(?)。

eventlet和gevent都可以在Stackless上运行,而不是在greenlet上运行。 在某些时候,我们甚至试图把这个做成一个GSoC项目,但没有find一个学生。

回答你的问题的一部分 – 如果你看看http://speed.pypy.org你会发现在PyPy上使用扭曲;可能会给你一些加速。 这当然取决于你的工作量,但它可能值得检查。

干杯,
fijal

我已经在eventlet和repoze.bfg之上构build了一个实时的Web应用程序(很久以前我放弃了Django)。 我发现eventlet和monkey patching就像Ted说的一样简单。

Gevent不是纯粹的Python,它严格依赖于CPython。 从你提到的Web框架中, Eventlet (OpenStack)和Tornado ( FriendsFeed ,Quora)拥有最大的部署。