3

私は単純な python スクリプトを持っていますが、久しぶりに実行すると、はるかに長い実行時間が表示されます。直後に実行すると、いくつかの要因で高速になります。

このスクリプトは、アプリケーションが実行されていないプライベート テスト サーバーで実行されるため、システム リソースの不足が原因で実行が遅くなるとは思いません。

#!/usr/bin/env python
import redis,time,sys
print "hello"


$ time python test.py

real    0m0.149s
user    0m0.072s
sys     0m0.076s

$ time python test.py

real    0m0.051s
user    0m0.020s
sys     0m0.028s

実行時間の違いを説明できる人はいますか?

外部スクリプトを含む php スクリプトに対して同様のテストを実行しましたが、そのスクリプトの実行時間にはほとんど差がありません。

このようなスクリプトは数回呼び出され、応答が 70 ミリ秒から 450 ミリ秒の間に配信されるため、この違いがアプリケーションに影響します。

4

1 に答える 1

4

いくつかの要因が考えられます。今考えられるのは次の2つです。

  1. 初期バイトのコンパイル。

    Python はコンパイルされたバイトコードを.pycファイルにキャッシュします。最初の実行時にそのファイルを作成する必要があり、その後の実行ではバイトコード キャッシュのタイムスタンプを確認するだけで済みます。

  2. ディスクキャッシング

    Python インタープリター、直接参照する 3 つのライブラリー、それらのライブラリーが使用するものはすべて、スクリプトとバイトコード キャッシュを除いて、すべてディスクからロードする必要があります。OS は、アクセスを高速化するために、このようなファイルをキャッシュします。

    同じシステムで他のものを実行した場合、それらのファイルはキャッシュからフラッシュされ、再度ロードする必要があります。

    同じことがディレクトリ リストにも当てはまります。モジュール検索パス内のモジュールの場所のチェックとバイトコード キャッシュのテストはすべて、キャッシュされたディレクトリ情報によって高速化されます。

このような起動時間がアプリケーションに影響する場合は、これらのタスクをサービスとして提供するデーモンを作成することを検討してください。RPC 呼び出し (ソケットまたは localhost ネットワーク接続を使用) は、ほとんどの場合、これらの起動コストを上回ります。メッセージ キューは、このようなデーモンのアーキテクチャを提供できます。

于 2013-04-03T08:38:40.640 に答える