Open3
gunicornによってWebアプリはどのように起動してリクエストを処理するのか?
そもそもgunicornとは何か?
Gunicorn 'Green Unicorn' はUNIX用のPython WSGI HTTPサーバーです。プリフォークワーカーモデルです。Gunicornサーバーは、様々なウェブフレームワークと幅広く互換性があり、シンプルに実装されており、サーバーリソースの消費が少なく、かなり高速です。
Gunicornは Python WSGI HTTPサーバー=WSGIに対応したHTTPサーバ
WSGI
プログラミング言語Pythonにおいて、WebサーバとWebアプリケーション(あるいはWebアプリケーションフレームワーク)を接続するための、標準化されたインタフェース定義である
WSGIとはつまりWebサーバ(HTTPサーバ)とアプリケーションコードを分離するための仕組み。
双方がWSGIに対応していれば組み合わせは気にしないでよくなる。
そのため基本的にPythonのWebアプリケーションフレームワークはWSGI、ないし※ASGIに対応している。
※ASGIは大雑把に言うと非同期対応したWSGIの後継
gunicornのアーキテクチャ
gunicorn公式のアーキテクチャデザインのドキュメントを見ると、pre-fork/workerモデルに基づくとあるので、マルチプロセスまたはマルチスレッドでのリクエスト処理が可能です。
また、gunicornではworkerの実装を切り替える事が可能なので(ここでいうworkerとはpre-forkされたworkerプロセスのこと)、これによって例えばASGIやevent駆動に対応したworkerクラスを指定することなどが可能。
ここらへんの詳しい挙動や説明はfastapiのドキュメントがかなり分かりやすく解説してくれている。