Django CGI(5.x / 1.x 2.x)

執筆:2019.07.08
編集:2019.07.08
編集:2024.08.04



(2024-08-04)
PythonのバージョンとDjango を最新の5.0をインストールするとDjango 2.xのコードは そのまま動きました!

相変わらずオーバーヘッドが大きい

CGI版での速度 (調査日 2024年8月4日)

サーバー
(apache2.4)

django(CGI)
django 5.0
Python 3.12

ディフェンダーの設定
C:\Program Files\Python
を除外設定

/admin/
hello
Windows11
(ローカルホスト)
2.10~2.70秒 約1.5秒
★ C:\Program Files\Python\3.12\Lib\site-packages\django の除外設定だけでも効果がありました。


(2024-07-18)
しばらく使っていない間に、The latest official version is 5.0.7.になっていますね
https://www.djangoproject.com/download/

https://docs.python.org/ja/3.12/library/cgi.html
Python cgiモジュールは、バージョン 3.11 で非推奨、バージョン 3.13 で削除予定とありますね
上記ページで3.13以降のマニュアルにするとなくなっています。

ということで、Django をCGIとして動作させる裏技は将来的に封殺されるかもしれないです。

CGIアプリケーションを作りたい場合は、Pythonは候補からはずれるということです。

格安運用でdjangoがいい場合は、共有サーバーではなく、安いVPS(仮想専用サーバー)を借りないといけないのかもしれないですね~。400円/月くらいですか?
VPSは自己管理なので面倒ですよね~

django1.x と2.xの両方で動作可能な django.cgiを作ったので速度を比較してみた。
前回とは違うアプローチをしてみたので、1個のファイルに小さく収まりました。

ベンチマークをすると CGI起動だとdjangoは 応答速度的に使えないコと判明しました。
ただし、CGIではなく常駐で運用するとレスポンスはとても速いです。

結論
djangoをCGIで動かすと何もなくても 0.5~0.6秒 レスポンスまでに時間がかかります。
djangoをCGIで運用することはお勧めできません。
mod_wsgiが使えない場合は、mod_phpなら導入されているサーバーは多いので、phpのフレームワークを検討したほうが賢明です。

原因
djangoは多数のファイルに分散されて、起動時にそれを読み込むため、CGIで動作させると とても時間がかかります。

速度比較いろいろ

django1とdjango2の速度差はそれほどなく、若干django2のほうがレスポンスが速い傾向にありました。

django

サーバー CGI

manage.py
runserver

mod_wsgi
localhost 1.11秒 0.01秒 0.03秒
さくらインター
ネット ライト
1.23秒 - -

※ 応答速度が1秒を超えると閲覧者に遅いとストレスを感じさせてしまいます。

CGI版での速度比較 (調査日 2019年7月7,8日)

サーバー
(apache2.4)
django1(CGI) hello.cgi
/admin/ hello python php C言語 GO
Windows10
(ローカルホスト)
5.86秒 2.64秒 0.30秒 0.25秒 0.02秒 0.06秒
FreeBSD11
(イントラネット)
1.11秒 0.51秒 0.03秒 0.03秒 0.01秒 0.02秒
さくらインターネット
ライト
FreeBSD9
(インターネット)
1.23秒 0.64秒 0.08秒 0.12秒 0.06秒 0.06秒
※ 時間は、URL呼び出し開始からデータ取得終了までにかかった時間。
※ C言語バイナリが最小時間は一番小さかった。

CGIのサイズ
ファイルサイズ hello.cgiの種類
1,988,354 GO バイナリCGI
6,604 C言語 バイナリCGI
140 PHP CGIスクリプト
115 perl CGIスクリプト