何时使用旋风,何时使用扭曲/旋风/GEvent/other

这些框架/库中哪一个是构建现代多用户 Web 应用程序的最佳选择?我想有一个异步的网络服务器,这将使我很容易扩展。 最佳表现/可伸缩性/最有用的框架(在使用和开发方面)有什么解决方案?

如果它能提供良好的 功能(websockets、 rpc、流媒体等) ,那就太好了。

每种解决方案的优缺点是什么?

87916 次浏览

这显然是一个 有些偏颇的答案,但这与 错了的答案不是一回事; 您应该始终使用 Twsted。我以前回答过 类似的问题,但是因为你的问题不太一样,这里有一些原因:

“最佳表现”

扭曲持续监测我们的表现在 Speed.twistedmatrix.com网站。我们也是最早的 由 PyPy 的类似网站监控项目之一,因此可以确保所有关心 Python 中高性能应用程序的人都能够在运行时上获得 Twsted 的良好性能。

“可伸缩性”

据我所知,所列出的框架都没有任何内置的自动伸缩支持; 它们都是通信框架,因此必须在伸缩节点之间进行通信。然而,扭曲在它的 内置支持本地多处理有一个优势。公平地说,有 龙卷风的第三方插件允许你做同样的事情。在最近的版本中,Twsted 还增加了一些功能增加了在核心之间共享工作的方式的数量,并且这方面的工作正在进行中。Twsted 还有一些 融合良好“本地人” RPC 协议,它们提供了一个构造工具包,可以用于任何你想要使用的缩放习惯用法。

“最有用”

许多人似乎找到了扭曲的 非常有用。如此之多,以至于他们中的许多人已经扩展了它,并且让他们的扩展对你可用。

“功能”

开箱即用,扭曲包括:

至少在这最后一个部门,Twsted 似乎是内置功能的明显赢家。所有这些,在一个超过2MB 的包中!

我喜欢@Glyph 回复。 Twist 是一个非常全面、丰富的 Python 框架。 扭曲和龙卷风有一个非常相似的设计。 我非常喜欢这个设计:

  • 很快
  • 很容易理解
  • 很容易延伸
  • 不需要 接发
  • 在 PyPy 上工作。

但是我想强调的是 龙卷风,我更喜欢它,并且最近开始流行起来。 龙卷风,像扭曲,使用回调样式编程,但它可以内联使用 tornado.gen.engine(twisted.internet.inlineCallbacks在扭曲)。

代码库

最好的评论来自 http://cyclone.io的网站。 龙卷风试图混合扭曲和龙卷风,因为:

Twsted 是最成熟的非阻塞 I/O 库之一 是 FriendFeed 网站服务器的开源版本, 最流行和最快的 Python 网络服务器之一,具有非常 用于构建 Web 应用程序的体面 API。

这个想法是为了将龙卷风优雅而直接的 API 扭曲的事件循环,支持大量受支持的协议。

但是在2011年 tornado.platform.twisted出来了,带来了类似的功能。

表演

龙卷风有更好的 表演。它也与 PyPy 无缝工作,并获得巨大的收益。

可伸缩性

同样的,Twisted.Tornell 也有 tornado.process和许多 rpc 服务在其上实现。

功能

有71个基于龙卷风的封装,相比之下,扭曲的148个和48个 Gevent 的。但是,如果你仔细观察并计算软件包上传时间的中位数,你会发现,扭曲的是最古老的,然后 Gevent 和龙卷风最新鲜。 此外,还有 tornado.platform.twisted模块,它允许您 运行为“龙卷风扭曲”编写的代码

摘要

有了龙卷风,你可以使用扭曲的代码。没有必要使用旋风只有 曲折你的代码(你的代码变得更凌乱)。

至于2014年,龙卷风被认为是被广泛接受的默认异步框架,可以在 python2和 python3上运行。此外,最新版本的4.x 带来了来自 https://docs.python.org/dev/library/asyncio.html的许多功能。

我写了一篇文章,解释了为什么我认为 龙卷风-最好的 Python web 框架,其中我写了更多关于龙卷风的功能。

(更新: 这里很少有答案推荐甚至是提到 Gevent,我对此感到非常惊讶ーー我不认为这与这个优秀图书馆的受欢迎程度、性能和易用性成正比!)

事件和扭曲并不是相互排斥的,即使相反的情况在一开始似乎是显而易见的。有一个名为 geventreactor的项目,可以让人们相对平稳地利用两方面的优势,即:

  • Gevent 的高效、廉价(合作的绿色)线程模型,在并发方面编程要容易得多ーー坦率地说,Twsted 的 inlineCallbacks在很多协同程序的性能方面根本无法胜任工作,在易用性和透明度方面也是如此: yieldDeferreds无处不在; 通常很难构建一些抽象; 使用裸 Deferred@inlineCallbacks进行的堆栈跟踪非常无用,甚至更糟糕。
  • 所有的内置功能扭曲,你可以梦想,包括但不限于 IReactorProcess.spawnProcess

我个人目前使用的是 Gevent 1.0 rc2和 geventreactor桥接的 Twister 12.3。我已经实现了我自己对 geventreactor的尚未发布的补充和增强,我将很快发布,希望作为 geventreactor的原始 GitHub 存储库: https://github.com/jyio/geventreactor的一部分。

我目前的布局允许我在 Gevent 的漂亮编程模型中编程,并利用诸如非阻塞 socketurllib2和其他模块之类的东西。我可以使用常规的 Python 代码来做常规的事情,而不是像 Twsted 那样学习曲线和做简单的基本事情带来的不便。我也可以很容易地使用大多数第三方库,这些库通常要么是不可能的,要么是需要使用线程的。

我还可以通过使用 greenlet (而不是 Deferred和回调函数以及/或 @inlineCallbacks)来完全避免基于回调函数的编程过于复杂。

(这个答案是基于我个人的经验写的,我曾经在现实生活中的项目中同时使用过 Twist 和 Gevent,并且有着更丰富的使用经验(但是我并不自称是一个 Twist 专家)。我不得不编写的软件并没有使用太多 Twister 的特性,所以根据你需要的一系列特性,混合 Gevent 和 Twister 的额外复杂性(相对来说没有痛苦)可能不值得麻烦

翻译: 奇芳是一个高级 Python Web 框架,它鼓励快速开发和干净、实用的设计” 。如果您正在构建类似于电子商务站点的东西,那么您可能应该使用 Django。它会让你的工作很快完成。你不必担心太多的技术选择。它提供了从模板引擎到 ORM 的所有你需要的东西。它会对你的应用程序结构有些固执己见,如果你问我的话,这是好事。而且它拥有所有其他图书馆中最强大的社区,这意味着可以轻松获得帮助。

译自: 美国《科学》杂志网站(http://Flask.pocoo.org/)是基于 Werkzeug、 Jinja 2和良好意愿的 Python 微框架” 。当心——“微框架”可能会产生误导。这并不意味着 Flask 是一个半生不熟的图书馆。这意味着烧瓶的核心是非常,非常简单的。不像姜戈,它不会为你做任何技术决定。您可以自由选择任何取悦您的模板引擎或 ORM。即使它默认带有金贾模板引擎,你也可以自由选择我们自己的。据我所知,Flask 在编写 API 端点(RESTful 服务)方面很有用。

翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳是用 python 编写的事件驱动的网络引擎” 。这是一台高性能引擎。其发展速度之所以如此之快,主要原因在于所谓的“延迟”。扭曲是建立在延迟之上。对于那些不知道延迟的人来说,这是通过异步体系结构实现的机制。扭曲是非常快的。但不适合编写传统的网络应用程序。如果你想做一些低层次的社交活动,扭曲是你的朋友。

龙卷风是一个 Python web 框架和异步网络库,最初由 FriendFeed 开发。通过使用非阻塞网络 I/O,Torado 可以扩展到数以万计的开放连接,使其成为长轮询、 WebSocket 和其他需要到每个用户的长期连接的应用程序的理想选择。龙卷风就在姜戈和酒瓶之间。如果你想写一些东西与 Django 或烧瓶,但如果你需要一个更好的性能,你可以选择龙卷风。如果架构正确,它可以很好地处理 C10k 问题。

强热带气旋是 Python 的一个 Web 服务器框架,它实现了作为一个扭曲的协议的旋风 API” 。现在,如果你想要一个性能几乎和 Twsted 一样好但是易于编写传统网络应用的东西,你该怎么办?跟旋风打个招呼。比起龙卷风,我更喜欢旋风。它有一个 API,非常类似于龙卷风。事实上,这是龙卷风的分叉。但问题是它的社区相对较小。亚历山大 · 菲奥里是回购协议的唯一主要承诺人。

译自: 美国《科学》杂志网站(http://docs.pylonsproject.org/en/update/docs/yramid.html)是一个通用的、开源的、 Python web 应用程序开发框架。它的主要目标是让 Python 开发人员更容易创建 Web 应用程序。”我没有真正使用过金字塔,但是我仔细阅读了文档。据我所知,金字塔是非常类似的 酒瓶和我认为你可以使用金字塔的地方 酒瓶似乎是适当的,反之亦然。

EDIT : 欢迎要求审查任何其他框架!

资料来源: http://dhilipsiva.com/2013/05/19/python-libraries-django-twisted-tornado-flask-cyclone-and-pyramid.html