Pythonで定周期で誤差を少なく処理したい(シンプルなのが好き)
定周期処理の仕方はいろいろある中で、できるだけ正確にシンプルな方法で機種依存なくできる方法を考える
たどり着いた方法
実行開始時間をベースに経過時間を定周期間隔で割った余りをスリープすることにしました
(python3.3以降)
import time
def TimeSpan(interval):
BaseTime = time.perf_counter()
while True:
# 任意の処理
now = time.perf_counter()
ET = now - BaseTime
rem = ET % interval
time.sleep(interval - rem)
# 1秒周期
TimeSpan(1)
ばらつき具合
まとめ
Python3.3以降のtime.pref_counter()を使いました 3.3より前のバージョンのtime.time()より精度がいいらしいです
いずれにしろWindowsとUnix系で精度が違うのと、他のプロセスの影響も受けるため精度が必要な場合は注意が必要です