web-dev-qa-db-ja.com

time.time対timeit.timeit

時には、コードの一部を実行するのにかかる時間を測定したい場合があります。私は多くのオンラインサイトをチェックしましたが、これを行うには、大きく分けて2つの方法があります。 1つはtime.timeを使用しており、もう1つはtimeit.timeitを使用しています。

そのため、2つを比較するための非常に単純なスクリプトを作成しました。

from timeit import timeit
from time import time
start = time()
for i in range(100): print('ABC')
print(time()-start, timeit("for i in range(100): print('ABC')", number=1))

基本的には、forループで「ABC」を100回印刷するのにかかる時間です。左側の数字はtime.timeの結果、右側の数字はtimeit.timeitの結果です。

# First run
0.0 0.012654680972022981
# Second run
0.031000137329101562 0.012747430190149865
# Another run
0.0 0.011262325239660349
# Another run
0.016000032424926758 0.012740166697164025
# Another run
0.016000032424926758 0.0440628627381413

ご覧のとおり、time.timeの方が速い場合と遅い場合があります。どちらがより良い方法(より正確)ですか?

35
user2555451

timeitは、次の3つの理由により、より正確です。

  • テストを何度も繰り返し、ディスクのフラッシュやOSのスケジューリングなど、マシンの他のタスクの影響を排除します。
  • ガベージコレクターを無効にして、不適切な瞬間にコレクションの実行をスケジュールすることにより、プロセスが結果を歪めないようにします。
  • Python 2 and time.perf_counter() on Pythonで、OS、time.timeまたはtime.clockの最も正確なタイマーを選択します= 3. timeit.default_timer を参照してください。
55
Martijn Pieters