ブログ一覧

Python: DjangoをApacheから呼び出せるようにする方法

関連記事

Djangoはそれ自体に簡易Webサーバを搭載しています。
しかしそれを使えるのはせいぜいプロトタイプ開発までで、実運用時はApacheなどの 本格的なサーバを使用することになります。Apacheからdjangoのハンドラ群を呼び出せるように するための設定を以下に説明していきます。

PythonベースのWeb開発フレームワーク:Django

DjangoはPythonベースのMVCモデルのWeb開発フレームワークです。
Django本家によると、 Djangoの特徴としては、以下が挙げられるようです。

Python: Django1.0(Postgresql, psycopg)をMacOSXにインストールする方法

Djangoは、PythonでMVC開発するためのWeb開発フレームワークです。
いわばRuby on RailsのPython版といったところでしょうか。

 ・ Django日本版
 ・ Django本家

これをMacにインストールするためには、
Django、RDBモジュール(Postgresql, MySQLなど)、psycopgなどのPython-RDB間を つなぐI/Fモジュールが必要です。

Python: system()やpopen()系で実行したプロセスは自分の孫プロセスになる?

表題で書いた問題をみなさん意識されたことはありますでしょうか?
通常system(cmd), popen(cmd)などを実行する際、コマンド文字列cmdを引数として渡して 実行していると思います。その場合、/bin/shシェルを経由して実行されるので

実行プロセス -> /bin/sh -> cmdプロセス


という関係になります。
この場合、実行プロセスからcmdプロセスのpidを取得することは出来ません。 なので、cmdプロセスをコントロール(終了させたり)するのが難しくなります。

Linuxでプロセスが死んだらどうなるか?

LinuxでWebサーバなどを立ててCGI運用している場合、 よくCGIから子プロセスを生成してCGI外プログラムを実行することは良くあると思います。 そんなとき留意しないと行けないことがあります。
  1. Apacheでは、ある一定回数CGIが応答するとpreforkしていたプロセスが終了するように できている。
  2. Linuxでは、親プロセスが終了すると子プロセスはinitプロセスにつながれる。

Apache: CGIでシグナルハンドラを使用する方法

Apache2系ではデフォルトのプロセスモデルが「Worker + Prefork」方式になりました。 簡単に言うと、
  • HTTPリクエストに応答するWebサーバープロセスを予め複数起動しておくことで プロセス生成時間を排除することで応答時間(スループット)を短縮しようというのがPrefork。
  • 当該プロセスからさらに応答スレッドを複数生成して大量のリクエストに応答しようというのが Worker。
ということになります。

上記モデルが採用されたことでApacheはさらに応答速度、同時応答数の性能を増加させた 訳ですが、一方で隠された仕様変更も生じています。
CGI内でSIGALRMシグナルを使用できないというのもその代表例です。