Open3

gunicornによってWebアプリはどのように起動してリクエストを処理するのか?

tektektektek

そもそもgunicornとは何か?

Gunicorn 'Green Unicorn' はUNIX用のPython WSGI HTTPサーバーです。プリフォークワーカーモデルです。Gunicornサーバーは、様々なウェブフレームワークと幅広く互換性があり、シンプルに実装されており、サーバーリソースの消費が少なく、かなり高速です。

https://gunicorn.org

tektektektek

Gunicornは Python WSGI HTTPサーバー=WSGIに対応したHTTPサーバ

WSGI

プログラミング言語Pythonにおいて、WebサーバとWebアプリケーション(あるいはWebアプリケーションフレームワーク)を接続するための、標準化されたインタフェース定義である

https://ja.wikipedia.org/wiki/Web_Server_Gateway_Interface

WSGIとはつまりWebサーバ(HTTPサーバ)とアプリケーションコードを分離するための仕組み。
双方がWSGIに対応していれば組み合わせは気にしないでよくなる。
そのため基本的にPythonのWebアプリケーションフレームワークはWSGI、ないし※ASGIに対応している。

※ASGIは大雑把に言うと非同期対応したWSGIの後継
https://asgi.readthedocs.io/en/latest/

tektektektek

gunicornのアーキテクチャ

gunicorn公式のアーキテクチャデザインのドキュメントを見ると、pre-fork/workerモデルに基づくとあるので、マルチプロセスまたはマルチスレッドでのリクエスト処理が可能です。

https://docs.gunicorn.org/en/latest/design.html#server-model

また、gunicornではworkerの実装を切り替える事が可能なので(ここでいうworkerとはpre-forkされたworkerプロセスのこと)、これによって例えばASGIやevent駆動に対応したworkerクラスを指定することなどが可能。
ここらへんの詳しい挙動や説明はfastapiのドキュメントがかなり分かりやすく解説してくれている。
https://fastapi.tiangolo.com/ja/deployment/server-workers/