我们正在将Twisted广泛用于需要大量异步io的应用程序。在某些情况下,某些东西是用CPU绑定(bind)的,为此,我们产生了一个进程池来完成工作,并且拥有一个跨多个服务器管理这些进程的系统-所有这些都是在Twisted中完成的。效果很好。问题在于,很难使新团队成员跟上步伐。用Twisted编写异步代码需要接近垂直的学习曲线。好像人类只是自然而然地没有那样想。

我们可能正在考虑混合方法。也许将xmlrpc服务器部分和流程管理保留在Twisted中,并在代码中实现看上去至少在某种程度上是同步的而不是这样的其他东西。再说一次,我喜欢显式的而不是隐式的,所以我不得不再考虑一下。无论如何,进入greenlets-这些东西的工作情况如何?因此存在Stackless,正如您从我的Gallentean头像中看到的那样,我很清楚CCP的旗舰级EVE Online游戏第一手使用它所取得的巨大成功。那Eventlet或gevent呢?好吧,目前只有Eventlet与Twisted兼容。但是gevent声称它更快,因为它不是纯Python实现,而是依赖libevent。它还声称具有较少的特质和缺陷。 gevent据我所知,它由1个人维护。这让我有些不安,但是所有出色的项目都是以这种方式开始的……PyPy-我什至还没有读完它-只是在这个线程中看到了它:Drawbacks of Stackless

如此令人困惑-我想知道该怎么做-听起来像Eventlet可能是最好的选择,但它真的足够稳定吗?有人对它有经验吗?我们是否应该使用Stackless而不是因为它已经存在并且它是经过验证的技术-就像Twisted一样-它们可以很好地协同工作。但我仍然讨厌不得不使用单独的Python版本来执行此操作。该怎么办....

但是,这个有点令人讨厌的博客条目对我来说很令人头疼:Asynchronous IO for Grownups我不明白Twisted就像Java一样,对我来说Java通常是您在线程思维中所处的位置,但无论如何。不过,如果那个猴子补丁真的像那样工作,那就哇。哇!

最佳答案

您可能要 checkout :

  • Comparing gevent to eventlet
  • Reports from users who moved from twisted or eventlet to gevent

  • Eventlet和gevent不能真正与Stackless相提并论,因为Stackless附带了一个不知道tasklet的标准库。有socket for Stackless的实现,但没有gevent.monkey这么全面。 CCP不使用裸露的Stackless,它具有一种称为Stackless I/O的功能,其AFAIK仅适用于Windows,并且从未开源(?)。

    eventlet和gevent都可以在Stackless上运行,而不是在greenlet上运行。在某些时候,我们甚至尝试以GSoC project的形式进行操作,但没有找到学生。

    10-08 20:10