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インタプリタ)内に複数スレッドが走ることになるので、スレッドセーフなプログラムにしておく必要がある。
参考サイト
- modwsgi - Python WSGI adapter module for Apache. - Google Project Hosting
- mod_wsgi: WSGIDaemonProcess - Pyxis 開発ブログ
- mod_wsgiでDjangoを動かすまでを淡々と記録する - スコトプリゴニエフスク通信
- TracModWSGI – Sandbox Trac-0.11.7.ja1
- fastcgi-nginx vs mod_wsgi-apache -- Kosei Kitahara's Blog
- Perl CGIのキャッシュ環境 - adiary開発日誌
- FastCGIのインストールと設定 : Movable Type 5 ドキュメント