Django如何处理多个请求?

时间:2018-03-10 20:22:26

标签: python django wsgi

Django如何在生产环境中处理多个请求?

假设我们有一个Web服务器:Apache,Nginx,gunicorn等 那么来自Web浏览器的任何请求的服务器是否都会启动新流程以满足该请求? 如果这是真的,它不会造成巨大的开销吗? 如果不是这样,那么同一个视图(让def hello(request)视图绑定到/hello url)同时为多个请求提供服务。

我看到了问题的答案“...处理多个用户”

1 个答案:

答案 0 :(得分:2)

Django一次只处理一个请求。

如果您使用非常旧的CGI接口(在您的Web服务器和Django之间),则会在每次请求时启动新的Django进程。但我认为没有人这样做。

Web服务器上有许多其他接口,而不是每次请求加载新的服务器端程序。 FastCGI就是其中之一(与编程语言不可知),有些程序有自己的模块直接在web服务器中实现(例如mod-php)[python过去曾经这样]。但是现在Django和一般的python,更喜欢WSGI接口。

因此,webserver并行打开一个或多个程序(Django app)。 Web服务器将向空闲进程发送请求(或者它是队列请求,这由Web服务器处理)。它取决于Web服务器配置的进程数量和持续时间。

django支持的数据库支持并发,因此让不同的进程处理同一个应用程序没有问题。 [SQLite不同,但你应该使用它,只是为了开发/测试Django]。通过写入一些日志文件[通常是多行],可以看到一些问题(并行进程同时写入,同一个文件)。

注意:在这样的解释中,我使用" web server"从广义上讲。这包括gunicorn,mod-wsgi等。