私には意味のないものに出くわしました。私が働いている場所には、多数の Python CGI Web ページ (Django や Turbogears などを実行していない単純な Apache サーバーのセットアップのみ) があり、スクリプトの実行に時間がかかることに少し不満を感じています。多くの time.time() 呼び出しをやめて、ボトルネックを sqlalchemy のインポートとして特定したと思いました (ただし、おそらく「任意の大きなモジュール」であると考えているため、sqlalchemy タグが間違っている可能性があります)。
したがって、さまざまなことを試した後、この例に行き着きました(ファイルが「test.py」と呼ばれていると仮定します)
#!/usr/bin/python
import time
t1 = time.time()
import sqlalchemy
print time.time() - t1
コマンド プロンプトで (実行可能に設定して) test.py を実行すると、通常、そのインポート ステートメントに対して約 0.7 秒 (+/- 0.1 秒) が表示されます。
でも、電話したら
python -c "execfile('test.py')"
約10倍の速度アップが得られます
そこで、python CGI スクリプトのいくつかを、以下を呼び出す小さな tcsh スクリプトでラップしようと考えました。
python -c "execfile('mypythoncgiscript.py')"
通常は約 2 ~ 3 倍高速化され、重要なことに、返されるデータは依然として正確です。
import-heavy スクリプトではなく cpu-heavy スクリプトを使用すると、次のようになります。
t1 = time().time()
a = 0
for i in xrange(10000000):
a += 1
print time.time() - t1
execfile を使用すると、わずかな速度低下が発生します。これは、わずかな execfile オーバーヘッドから予想されることです。
ここで何が起こっているか知っている人はいますか?誰かが同様の速度の違いを再現できますか、それとも execfile が何らかの形で修正する方法でセットアップが壊れていますか? インポートは execfile 内でわずかに異なる動作をすると思いました (または、少なくとも、execfile ステートメントを終了すると、必ずしも表示されるとは限りません) が、速度の大きな違いに驚いています。
オラクルが提供する「Enterprise Linux Serverリリース5(Carthage)」でpython 2.4 64ビットを実行しています。