具有非阻塞架构的 Python Web 服务器选项

Posted

技术标签:

【中文标题】具有非阻塞架构的 Python Web 服务器选项【英文标题】:Python web server options with nonblocking architecture 【发布时间】:2011-05-06 08:02:40 【问题描述】:

我正在寻找一个基于 Python 的非阻塞 Web 服务器环境,该环境旨在处理大量同时连接并在重负载下做出响应 (C10K)。我需要它作为我的 web 应用程序的后端。在典型情况下,webapp 客户端将使用 WebSockets 对服务器进行多次调用。

到目前为止,我在 python 领域找到了 2 个选项。

TornadoWeb Twisted

在python之外当然有node.js,但如果可能的话我更喜欢python编码环境。

您会推荐以上两种(或我不知道的其他)中的哪一种?什么是利弊?或者我应该通过为 web.py 编写一些非阻塞前端来推出自己的框架?

我担心的是,虽然上述两个项目似乎都有很好的社区支持,但它们不像 Django、CherryPy、Pylon 等那样主流。因此我害怕做出未来可能会导致支持不佳的选择。

【问题讨论】:

【参考方案1】:

作为 Twisted 的核心开发人员之一,我强烈建议您使用 Twisted。 :)

首先,因为它是一个优秀的库,有一个开发团队committed to high quality software。 Twisted 提供了极其广泛的功能,从 (well performing) simple web server 到数据库集成(基于 Twisted 本身的线程或 txmysql 或 txpostgres 中的无线程,单独分发)以支持其他协议,如 FTP、DNS、XMPP、SMTP 等等。是的,even WebSockets。

其次,因为它是一个很好的大型网络服务器解决方案,就像您在 Python 中找到的一样。由于您对C10K很熟悉,我想我不需要过多阐述。可以说 Twisted has been used 在 large scale systems 中反复处理 huge numbers of connections。

第三,因为有一个不会很快消失的大型活跃社区,它提供了许多支持选项。将邮件列表、IRC 频道和 *** 结合起来,获得帮助的方式不胜枚举。

【讨论】:

【参考方案2】:

还有更多好的选择。您应该查看 Nicolas Piel 的 very good review of asynchronous python servers。

【讨论】:

虽然我对 Nicholas 为整理这篇评论所做的努力表示赞赏,但它的性能结果非常偏向于一个特定的、非常不切实际的工作负载。当然,我很不高兴这个特殊的工作负载对 Twisted 的处理特别糟糕,但是我认为我们可以做的事情并不多,可以提高我们在该基准测试中的性能,但不能降低其他更现实情况的性能(例如,例如,不适合单个 write() 调用甚至单个 TCP 段的响应。 (我还应该注意,它实际上并没有对任何异步 web 请求进行基准测试;每个服务器都只是通过编写静态字符串来响应,所以这是纯的基准测试I/O 延迟,而不是任何这些框架中的 HTTP 请求处理。) @Glyph:你有性能数据让 Twisted 更受欢迎吗?我在一个项目中使用 Twisted,很想看到故事的两面。

以上是关于具有非阻塞架构的 Python Web 服务器选项的主要内容,如果未能解决你的问题,请参考以下文章

Python web框架 Tornado异步非阻塞

Node.js中的服务器架构&回调函数的非阻塞式应用

Node.js中的服务器架构&回调函数的非阻塞式应用

python-tornado操作

玩转PythonWeb框架之Tornado

Tornado异步非阻塞的使用以及原理