web-dev-qa-db-ja.com

Djangoは複数のリクエストをどのように処理しますか?

Djangoは、本番環境で複数のリクエストをどのように処理しますか?

Apache、Nginx、gunicornなどのWebサーバーの1つがあるとします。
では、Webブラウザからの要求に対してこれらのサーバーは、その要求を処理するための新しいプロセスを開始しますか?
それが本当なら、それは巨大なオーバーヘッドを引き起こしませんか?
それが真でない場合、同じビュー(def hello(request)ビューにバインドされた/hello url)は、複数のリクエストを同時に処理します。

「...複数のユーザーを処理する」という質問に対する回答を見てきました

11
Alex-droid AD

Djangoは一度に1つのリクエストのみを処理します。

非常に古いCGIインターフェース(WebサーバーとDjangoの間)を使用している場合、新しいDjango=プロセスが要求ごとに開始されます。しかし、誰もこれを行っていないと思います。

Webサーバーには多くの追加インターフェースがあり、リクエストごとに新しいサーバー側プログラムをロードするわけではありません。 FastCGIはこれらの1つです(プログラミング言語に依存しません)。一部のプログラムには、Webサーバーに直接実装された独自のモジュールがあります(例:mod-php)[pythonにはこれがありました]。しかし、今Djangoそして一般的にPythonでは、WSGIインターフェースを好みます。

したがって、ウェブサーバーは1つ以上のプログラム(Djangoアプリ)を並行して開きます。 Webサーバーは要求を空きプロセスに送信します(または要求をキューに入れます。これはWebサーバーによって処理されます)。プロセスの数と期間は、Webサーバーの構成によって異なります。

Djangoがサポートするデータベースは同時実行をサポートしているため、同じアプリを処理するさまざまなプロセスで問題はありません。[SQLiteは異なりますが、これはDjangoの開発/テストのためだけに使用する必要があります]。一部のログファイル[通常は複数行]に書き込むと、いくつかの問題(同時に同じファイルに書き込む並列プロセス)が発生する可能性があります。

注:このような説明では、広い意味で「Webサーバー」を使用します。これには、gunicorn、mod-wsgiなどが含まれます。

6