weblog of key_amb

主にIT関連の技術メモ

mod_wsgiについてまとめてみる

mod_wsgiについてあまり日本語でよくまとまったページがないのでまとめてみようと思う。

ややイメージで書いているので、不正確な点があったらご指摘いただけるとうれしいです。

そもそもCGIがなぜ遅いか

リクエストごとにプロセス=インタプリタを立ち上げるから。
その都度サーバーにオーバーヘッドが掛かる。

FCGIはなぜ速いか

これを改良したのがFastCGIとかで、Apacheのプロセス側でインタプリタを起動しておいて(FCGIプロセス)、そいつがリクエストに応答する。
FCGIプロセスはリクエストごとに消滅したりしないので、効率よく応答できるわけだ。

WSGIとは

WSGIも似たようなものだと認識している。
WSGIにはApacheに組み込んで使うembededモードと、Apacheとは別のdaemonとして使うdaemonモードがある。
embededモードはFCGIのようなことをやってそう。daemonモードでは、daemonのプロセスがFCGIプロセスの機能を果たしていると思う。

WSGIではリクエストごとに「サブインタプリタ」が立ち上がるらしい。これがプロセスとして動くか、プロセス内のスレッドとして動くかは、Apache及びWSGIの設定によるようだ。
Apacheを"worker"でビルドし、WSGIのマルチスレッドを有効化している場合、1プロセス(=Pythonインタプリタ)内に複数スレッドが走ることになるので、スレッドセーフなプログラムにしておく必要がある。