3

一部の仮想マシンプラットフォーム上の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を実行しています。

ありがとう!

4

1 に答える 1

3

timeitdefault_timerおそらく現在のシステムで最も正確なポータブルタイミングメカニズムを返すものを提供します。

于 2013-03-15T16:12:09.223 に答える