How does Django handle multiple requests?

雨燕双飞 提交于 2021-01-20 22:24:12

问题


How does Django handles multiple requests in production environment?

Suppose we have one of web server: Apache, Nginx, gunicorn etc.
So do those servers for any request from web browser start new process to serve that request?
If it's true, doesn't it cause huge overhead?
If it's not true, then how the same view (let it be def hello(request) view bound to /hello url) serve several requests at the same time.

I've seen answers for question "... handle multiple users"


回答1:


Django handles just a request at a time.

If you use the very old CGI interface (between your web-server and Django), a new Django process is started at every request. But I think nobody do this.

There are many additional interfaces on web servers, not do load at every request a new server side program. FastCGI is one of these (agnostic to programming language), some programs have own module directly implemented in web server (e.g. mod-php) [python had this in the past]. But now Django and in general python, prefer WSGI interface.

So webserver open one or more programs (Django app) in parallel. The web server will send request to a free process (or it queue requests, this is handled by web server). How many processes, and for how long, it depend on web server configuration.

The databases supported by django supports concurrency, so there is no problem on having different processes handling the same app. [SQLite is different, but you should use this, just for developing/testing Django]. By writing to some log files [usually multiline], one could see some problems (parallel process which write at the same time, the same file).

NOTE: in such explanation I use "web server" in a broad sense. This includes gunicorn, mod-wsgi etc.



来源:https://stackoverflow.com/questions/49213647/how-does-django-handle-multiple-requests

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!