【问题标题】:Is twistedweb with django recommeneded是否推荐使用 django 扭曲网络
【发布时间】:2014-08-07 07:37:08
【问题描述】:

我有一个需要部署在 WSGI 容器中的 Django 应用程序。我可以选择像 TwistedWeb 这样的事件驱动应用服务器,也可以选择像 uWSGI 这样的流程驱动服务器。我完全理解事件驱动和进程驱动服务器之间的区别,并且我知道 Django 框架本质上是阻塞的。

我遇到了 TwistedWeb,它可以让我们以简单的方式运行 WSGI 应用程序。

我的问题如下:

1) 我会通过运行 Twisted 而不是 uWSGI 来获得什么,因为 Django 在本质上是阻塞的。 TwistedWeb 与标准的 twisted 库不同吗?我知道人们在需要异步支持时也使用 Django 运行 Twisted,以进行前聊天以及正常功能,但他们仍然只想拥有一个应用程序。我没有这样的用例,对我来说它只是一个网站。

2) TwistedWeb 上的性能会更差,因为它只是一个进程,而且我的请求会阻塞,因为 Django 本质上是同步的?或者 TwistedWeb 运行类似 uWSGI 的东西,它预先启动多个进程并在这些进程之间以循环方式分发请求?如果是,那么 TwistedWeb 是否比 uWSGI 更好?

3) 除了 WSGI 之外,是否还有其他协议可以将 Twisted 与 Django 集成并仍然给我异步行为(在这里试试我的运气:))

【问题讨论】:

    标签: python django twisted event-driven twisted.web


    【解决方案1】:

    您可以将这些问题作为一个单独的问题提出;任何时候你觉得需要列举一个列表,你可能应该这样做。但这里是:

    1. 是的,你会有所收获。通过在 Twisted 中托管 Django 应用程序,您可以访问 Twisted 主循环,从而访问所有 Twisted API,您可以使用 Crochet 之类的东西轻松访问它们。由于 Twisted 既可以用作外部 Web 服务器,也可以用作应用程序容器,因此您还可以消除拥有单独 Web 服务器的开销。
    2. 您的数据库和 Django 代码可能存在性能瓶颈。 Twisted 可能比nginx 之类的东西稍微慢一些,例如,直接提供静态内容,但您可以通过在 PyPy 下运行您的 twisted 服务器来使这种差异非常小。不过,您似乎在询问并发性——比如“Twisted 的 WSGI 容器一次只运行一个 Django 请求吗?” - 答案是“不”。 Twisted 的 WSGI 容器是多线程的,将或多或少地运行 Django 代码。
    3. 不清楚你在这里问什么,所以也许还是问另一个问题吧。

    【讨论】:

      【解决方案2】:

      不,除非您大量修改 django db 适配器和一些核心组件,否则您不会获得任何优势。有一些工具可以简化这项工作,但您将处于最前沿,试图使从一开始就使用阻塞范式构建的东西适应完全不同的东西。

      另一方面,性能不应该是最差的,因为 99.9% 的时间你的应用程序本身是瓶颈,而不是你的 WSGI 基础设施。

      关于 async django,很多人都对 gevent 很满意,但是您需要仔细分析您的应用程序以确保所有组件都是 gevent 友好的(这不是一件容易的事,尤其是对于 db 适配器)。

      请记住,即使您的应用 99.9999999% 没有阻塞,您仍然处于阻塞状态。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-10
        • 1970-01-01
        • 2011-06-17
        • 1970-01-01
        • 2011-01-19
        • 1970-01-01
        相关资源
        最近更新 更多