17

コードのスニペットの時間を計りたいのですが、CPU の実行時間だけを知りたいです (オペレーティング システムのプロセスなどを無視します)。

time.clock() を試してみましたが、不正確すぎるようで、毎回異なる答えが返ってきます。(理論的には、同じコード スニペットに対して再度実行すると、同じ値が返されるはずです??)

timeit で約 1 時間プレイしました。基本的に、私にとってそれを殺すのは「セットアップ」プロセスです.20個ほどの関数をインポートする必要がありますが、実際にはコードをセットアップセクションに書き直して使用するだけなので、実用的ではありません.

Cprofile はますます魅力的に見えますが、CPU 時間を返すのでしょうか? また、マイナーな点-出力される情報が多すぎます。出力された情報をtxtまたは.datファイルに取得して実際に読み取る方法はありますか?

乾杯

OS: Ubuntu プログラム: python 2.7

4

2 に答える 2

19

プロセス全体の実行時間を計測する方法を探しているように思えますが、最も正確な time.clock() または time.time() 関数を提供するtimeit.default_timer()を使用するのが最善の方法ですただし、これはシステム全体の時間であるため、他のプロセスが測定に干渉する可能性があります。

timeit.default_timer() のドキュメントからの情報は次のとおりです。

プラットフォーム固有の方法で、デフォルト タイマーを定義します。Windows では、time.clock() の粒度はマイクロ秒ですが、time.time() の粒度は 1/60 秒です。Unix では、time.clock() の粒度は 1/100 秒であり、time.time() ははるかに正確です。どちらのプラットフォームでも、default_timer() は CPU 時間ではなくウォール クロック時間を測定します。これは、同じコンピューターで実行されている他のプロセスがタイミングに干渉する可能性があることを意味します。

異なるタイミング API にアクセスできる可能性のある c モジュールをテストしてみてください。


これを行う最善の方法は、 python 3.3以降でのみ利用可能なtime.process_time()を使用することです。ドキュメントからの情報は次のとおりです。

現在のプロセスのシステム CPU 時間とユーザー CPU 時間の合計の値 (小数秒単位) を返します。スリープ中に経過した時間は含まれません。定義上、プロセス全体です。戻り値の基準点は定義されていないため、連続した呼び出しの結果の差のみが有効です。

于 2013-03-02T16:28:52.813 に答える
5

の代わりに、 ;time.clock()を使用します。timeit.default_timer()プラットフォームに最も正確なオプションを使用します。たとえば、Ubuntuの場合、これはtime.time()代わりに使用します。

を使用するtimeit場合は、を再利用できるセットアップ関数を1つ作成しますtimeit。はい、これは少し作業のように見えますが、タイムクリティカルな測定セクションにセットアップコードを含めずに、本当に測定したい時間を確実に計測できます。

于 2013-03-02T16:34:44.847 に答える