36

我们将 Twisted 广泛用于需要大量异步 io 的应用程序。在某些情况下,东西是受 cpu 限制的,为此我们产生了一个进程池来完成工作,并拥有一个跨多个服务器管理这些进程的系统——所有这些都在 Twisted 中完成。效果很好。问题是很难让新的团队成员跟上进度。在 Twisted 中编写异步代码需要接近垂直的学习曲线。就好像人类天生就不会那样想。

我们可能正在考虑采用混合方法。也许将 xmlrpc 服务器部分和进程管理保留在 Twisted 中,并在代码中实现其他内容,至少在某种程度上看起来是同步的,而不是同步的。再说一次,我喜欢显式而不是隐式,所以我必须多考虑一下。无论如何到greenlets - 这些东西的效果如何?所以有 Stackless,正如你从我的盖伦特化身中看到的那样,我很清楚它在 CCP 的旗舰 EVE Online 游戏中的第一手使用取得了巨大成功。Eventlet 或 gevent 呢?好吧,目前只有 Eventlet 与 Twisted 一起工作。然而,gevent 声称更快,因为它不是纯 python 实现,而是依赖于 libevent。它还声称具有较少的特质和缺陷。事件据我所知,它由 1 个人维护。这让我有点怀疑,但所有伟大的项目都是这样开始的……然后是PyPy——我什至还没有读完那个——刚刚在这个线程中看到了它:Stackless 的缺点

太令人困惑了——我想知道到底该怎么做——听起来 Eventlet 可能是最好的选择,但它真的足够稳定吗?有没有人有这方面的经验?我们是否应该使用 Stackless,因为它已经存在并且是经过验证的技术 - 就像 Twisted 一样 - 它们确实可以很好地协同工作。但我仍然讨厌必须有一个单独的 Python 版本才能做到这一点。该怎么办....

不过,这个有点令人讨厌的博客文章对我来说是一针见血:Asynchronous IO for Grownups I don't get the Twisted is like Java remark as to me Java通常是你处于线程思维方式的地方,但无论如何。尽管如此,如果那个猴子补丁真的像那样工作,那么哇。哇!

4

4 回答 4

28

您可能想查看:

Eventlet 和 gevent 与 Stackless 并没有真正的可比性,因为 Stackless 附带了一个不知道 tasklet 的标准库。Stackless 有 socket 的实现,但没有gevent.monkey那样全面。CCP 不使用基本的 Stackless,它有一种称为 Stackless I/O 的东西,AFAIK 是仅限 Windows 的,并且从未开源(?)。

eventlet 和 gevent 都可以在 Stackless 而不是 greenlet 上运行。在某些时候,我们甚至尝试将其作为GSoC 项目来做,但没有找到学生。

于 2010-06-16T04:21:28.033 回答
4

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

干杯,
菲亚尔

于 2010-07-29T19:23:10.260 回答
0

我在 eventlet 和 repoze.bfg 之上构建了一个小的实时网络应用程序(我很久以前就放弃了 django)。我发现 eventlet 和猴子补丁就像 Ted 说的一样简单。

于 2010-09-23T14:32:09.223 回答
0

Gevent 不是纯 Python,它严格依赖于 CPython。在您提到的 Web 框架中,Eventlet (OpenStack) 和Tornado (FriendsFeed、Quora) 部署最多。

于 2013-01-29T18:11:00.883 回答