web-dev-qa-db-fra.com

Comment Django gère-t-il plusieurs demandes?

Comment Django gère-t-il plusieurs requêtes dans un environnement de production?

Supposons que nous ayons un serveur Web: Apache, Nginx, gunicorn etc.
Est-ce que ces serveurs pour toute demande du navigateur Web démarrent un nouveau processus pour répondre à cette demande?
Si c'est vrai, cela ne cause-t-il pas d'énormes frais généraux?
Si ce n'est pas vrai, alors comment la même vue (que ce soit def hello(request) vue liée à /hello url) sert plusieurs demandes en même temps.

J'ai vu des réponses à la question "... gérer plusieurs utilisateurs"

11
Alex-droid AD

Django gère juste une demande à la fois.

Si vous utilisez la très ancienne interface CGI (entre votre serveur web et Django), un nouveau processus Django est lancé à chaque demande. Mais je pense que personne ne le fait.

Il existe de nombreuses interfaces supplémentaires sur les serveurs Web, ne chargez pas à chaque demande un nouveau programme côté serveur. FastCGI est l'un d'entre eux (agnostique au langage de programmation), certains programmes ont leur propre module directement implémenté dans le serveur Web (par exemple mod-php) [python avait cela dans le passé]. Mais maintenant Django et en général python, préférez l'interface WSGI.

Le serveur web ouvre donc un ou plusieurs programmes (application Django) en parallèle. Le serveur Web enverra la demande à un processus libre (ou s'il met en file d'attente les demandes, cela est géré par le serveur Web). Le nombre de processus et leur durée dépendent de la configuration du serveur Web.

Les bases de données prises en charge par Django prend en charge la concurrence, donc il n'y a aucun problème à ce que différents processus gèrent la même application. [SQLite est différent, mais vous devez l'utiliser, juste pour développer/tester Django]. En écrivant dans certains fichiers journaux [généralement multilignes], on pouvait voir quelques problèmes (processus parallèle qui écrivent en même temps, le même fichier).

REMARQUE: dans une telle explication, j'utilise "serveur Web" au sens large. Cela comprend gunicorn, mod-wsgi etc.

6
Giacomo Catenazzi