このようなベンチマークを実行しても問題ありません。例のように、「長く」実行され、かなり一定で実行される関数の精度は十分です。ただし、いくつかの落とし穴があります。「クイック」関数(空の関数など)の場合、精度の限界に遭遇します。また、実行時間が異なる関数(たとえば、net i / oなど)の場合、最小/最大/平均ランタイムを見つけるために複数回測定する必要があります。それに加えて、最適に使用される時計はプラットフォームによって異なります。Windowsではtime.clock()が、* nixではtime.time()が優先されます。
幸いなことに、すべてを処理するモジュールがありますtimeit
::
>>> import time
>>> def procedure():
pass
>>> def time_this(f):
t0=time.clock()
f()
print((time.clock() - t0), "seconds process time")
>>> time_this(procedure)
1.9555558310457855e-06 seconds process time
>>> time_this(procedure)
1.9555557742023666e-06 seconds process time
>>> time_this(procedure)
1.9555557742023666e-06 seconds process time
>>> import timeit
>>> timeit.Timer(procedure).timeit()
0.09460783423588737
>>> timeit.Timer(procedure).repeat()
[0.09791419021132697, 0.09721947901198291, 0.09598943441130814]
あなたはそれのソースを見たいかもしれません。または単にそれを使用してください;)
キャッシュに関して:Pythonコードは、最初に使用されたときにバイトコードにコンパイルされます。このバイトコードはデフォルトでキャッシュされますが、関数でsを実行しない限り、これはベンチマークに影響しませんimport
。