1

私には意味のないものに出くわしました。私が働いている場所には、多数の 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ビットを実行しています。

4

1 に答える 1

0

私の推測では、実質的な違いはありません。大きな違いにしか見えません。次のように試してテストしてください。

# time python test.py
0.0514879226685
python test.py  0.06s user 0.01s system 95% cpu 0.071 total

# time python -c 'execfile
0.0515019893646
python -c 'execfile("test.py")'  0.06s user 0.01s system 95% cpu 0.071 total
于 2010-12-23T10:36:57.073 に答える