推荐使用django扭曲的网页

时间:2014-08-07 07:37:08

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

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

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

我的问题如下:

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

2)TwistedWeb的性能是否会因为它只是一个进程而变得更糟,我的请求会阻止,因为Django本质上是同步的?或者TwistedWeb运行类似uWSGI的东西,它可以预先启动多个进程并以圆形方式分发请求?如果是,那么TwistedWeb是否比uWSGI更好?

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

2 个答案:

答案 0 :(得分:2)

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

  1. 是的,你会得到一些东西。通过在Twisted中托管您的Django应用程序,您可以访问Twisted mainloop,从而访问所有Twisted API,您可以使用Crochet之类的内容轻松访问这些API。您还可以消除拥有单独Web服务器的开销,因为Twisted可以充当外部Web服务器以及应用程序容器。
  2. 性能可能是您的数据库和Django代码的瓶颈。 Twisted可能比nginx稍微慢一点,例如直接提供静态内容,但是你可以通过在PyPy下运行扭曲的服务器来减少差异。看起来你似乎在询问并发性 - 像Twisted这样的WSGI容器一次只运行一个Django请求?" - 答案是"否"。 Twisted的WSGI容器是多线程的,它会或多或少地运行Django代码,因为它预期会运行。
  3. 目前还不清楚你在这里问的是什么,所以也许还要问其他问题。

答案 1 :(得分:2)

不,除非你大量修改django数据库适配器和一些核心组件,否则你将无法获得任何优势。有一些工具可以简单地完成这项工作,但是你会在尝试从一开始就采用阻塞范式构建的东西时,采用完全不同的东西。

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

关于async django,很多人都很幸运,但你需要仔细分析你的应用程序,以确保所有组件都是gevent友好的(这不是一件容易的事,特别是对于数据库适配器而言)。

请记住,即使您的应用是99.9999999%非阻止,您仍然会阻止。