4

Python のthreading.Timer時間精度は何に依存していますか?

使用するOSに依存しますか?
使用する Python 実装に依存しますか?
間隔にもよる?
どのようにベンチマークできますか?
ベンチマークはすでにありますか?

4

1 に答える 1

7

CPython では、threading.Timer の精度 (待機部分) は Condition.wait() 呼び出しに基づいています。

Condition.wait() (ここで実装min(delay * 2, remaining, .05)) は、遅延が最初に設定された場所の遅延を伴う連続したスリープによって行われ0.0005 # 500 us -> initial delay of 1 msます。この実装 (OS に依存しない) によれば、精度は少なくとも time.sleep の精度であると言えます。

ただし、 time.sleep() の精度は、使用される OS に基づいています (実装はここにあります: floatsleep() )。Windows では、WaitForSingleObject()内部 Windows タイマーで を使用し、Linux ではselect()メソッドを使用します。

少なくとも、スリープ遅延とは別に、OS の負荷が Python プロセスの反応性に干渉する可能性があるため、スケジューリング アルゴリズムも精度に影響を与える可能性があります。

于 2011-09-28T12:15:25.860 に答える