Python 是否推荐使用django的twistedweb

Python 是否推荐使用django的twistedweb,python,django,twisted,event-driven,twisted.web,Python,Django,Twisted,Event Driven,Twisted.web,我有一个Django应用程序,需要在WSGI容器中部署。我可以选择TwistedWeb之类的事件驱动应用服务器,也可以选择uWSGI之类的流程驱动服务器。我完全理解事件驱动服务器和进程驱动服务器之间的区别,我知道Django框架本质上是阻塞的 我遇到了TwistedWeb,它允许我们以简单的方式运行WSGI应用程序 我的问题如下: 1) 我会通过运行Twisted而不是uWSGI获得什么,因为Django本质上是阻塞的。TwistedWeb与标准twisted库不同吗?我知道,当人们需要对异步、

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

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

我的问题如下:

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

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


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

您可以将这些作为一个单独的问题来问;每当你觉得有必要列举一个清单时,你都应该这样做。但这里有:

  • 是的,你会有所收获。通过在Twisted中托管Django应用程序,您可以访问Twisted mainloop,从而访问所有Twisted API,您可以通过类似的方式轻松访问这些API。您还可以消除拥有单独web服务器的开销,因为Twisted可以作为外部web服务器和应用程序容器
  • 数据库和Django代码的性能可能会受到限制。Twisted可能比类似于
    nginx
    at的东西稍慢一些,例如,直接为静态内容提供服务,但通过在PyPy下运行Twisted服务器,您可以将这种差异降至最低。不过,您似乎在问并发性问题,比如“Twisted的WSGI容器一次只运行一个Django请求吗?”,答案是“否”。Twisted的WSGI容器是多线程的,将按照预期运行Django代码
  • 现在还不清楚你在问什么,所以还是问另外一个问题吧

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

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

    关于async django,很多人在gevent上都很幸运,但是你需要仔细分析你的应用程序,以确保所有组件都是gevent友好的(这不是一项容易的任务,特别是对于db适配器)

    记住,即使你的应用程序99.9999999%无阻塞,你仍然在阻塞