关于python:Eventlet或gevent或Stackless + Twisted,Pylons,Django和SQL Alchemy

Eventlet or gevent or Stackless + Twisted, Pylons, Django and SQL Alchemy

对于需要大量异步IO的应用程序,我们广泛使用Twisted。有些情况下,这些东西是CPU绑定的,因此我们生成一个进程池来完成这些工作,并有一个系统来跨多个服务器管理这些工作,所有这些工作都是在扭曲中完成的。工作很好。问题是很难让新的团队成员跟上进度。用Twisted编写异步代码需要一个近乎垂直的学习曲线。就好像人类不会自然而然地这么想。

我们正在考虑一种混合的方法。也许保持xmlrpc服务器部分和进程管理处于扭曲状态,并在代码中实现其他内容,这些代码至少在某种程度上看起来是同步的,而不是同步的。再说一次,我喜欢直白的,而不是含蓄的,所以我得多想想。不管怎么说,到了格林小队-那东西有多好用?所以有堆和你可以从我的加伦特化身看到,我很清楚它在使用党的旗舰夏娃在线游戏的第一手巨大的成功。eventlet或gevent呢?好吧,现在只有eventlet和twisted一起工作。然而,gevent声称速度更快,因为它不是纯Python实现,而是依赖libevent。它还声称其特性和缺陷更少。据我所知,它是由一个人维护的。这让我有点胆怯,但所有伟大的项目都是这样开始的,所以…还有Pypy——我还没有读完关于那个的书——只是在这条线上看到了它:Stackless的缺点。

很困惑——我想知道到底该怎么办——听起来像是eventlet可能是最好的选择,但它真的足够稳定吗?有没有人有这方面的经验?我们应该用无堆叠的方式来代替它,因为它已经被证明是一种技术——就像Twisted一样——而且它们可以很好地协同工作。但我仍然不喜欢有一个单独的Python版本来完成这项工作。怎么办…

这个讨厌的博客条目对我来说是一针见血的:对于成年人来说,异步IO,我没有得到扭曲,就像Java的注释一样,对于我来说,Java通常是你在线程的心态,但无论什么。不过,如果那只猴子补丁真的像那样工作的话,哇。哇!


您可能需要签出:

  • 比较gevent和eventlet
  • 从Twisted或Eventlet迁移到Gevent的用户的报告

eventlet和gevent并不能真正与stackless相比较,因为stackless附带了一个不了解微线程的标准库。有针对无堆栈的socket实现,但没有任何东西比gevent.monkey更全面。CCP不使用无堆栈的裸骨,它有一个称为无堆栈I/O的东西,Afaik只是Windows,从未开放源代码(?).

eventlet和gevent都可以在stackless上运行,而不是在greenlet上运行。在某种程度上,我们甚至尝试作为一个GSOC项目来做这个,但没有找到一个学生。


回答部分问题-如果你看http://speed.pypy.org,你会发现在pypy上面使用twisted可能会让你加速。这当然取决于您的工作量,但可能值得检查一下。

喝彩,< BR>菲贾尔


gevent不是纯Python,它严格依赖于cpython。从您提到的Web框架中,Eventlet(OpenStack)和Tornado(FriendsFeed,Quora)的部署规模最大。


我在eventlet和repoze.bfg的基础上构建了一个小的实时web应用程序(我很早就放弃了django)。我发现eventlet和monkey补丁就像Ted说的那样简单。