一部の仮想マシンプラットフォーム上のWindowsで実行されている場合、Pythonのtime.clock()関数は不正確です。
次のテストスクリプトを使用して、いくつかの異なるプラットフォームでいくつかのテストを行いました。
import datetime
import time
import timeit
startClock = time.clock()
startTime = time.time()
while (True):
currentClock = time.clock()
currentTime = time.time()
clockDiff = currentClock - startClock
timeDiff = currentTime - startTime
print (datetime.datetime.now())
print ('time.clock() Seconds: %s' % str(clockDiff))
print ('time.time() Seconds: %s' % str(timeDiff))
print ('Diff: %s' % str(clockDiff - timeDiff))
print ''
time.sleep(5)
実行している仮想マシンプラットフォームに応じて、clockDiffとtimeDiffの違いは大きく異なります。Parallels Desktop 8 for Mac、VMWare Fusion 5、およびHyper-Vを試しました。
この関連する質問を参照してください。問題は、ハイパーバイザーが低レベルのQueryPerformanceCounter関数を処理する方法にあります。
これが実行されているハイパーバイザーに関係なく、タイミングの精度が必要です。time.time()を使用することもできますが、time.clock()から取得する精度はありません。
同じ精度を与えるtime.clock()の代替タイマーはありますか?私はWindowsでPython2.7を実行しています。
ありがとう!