Pythonのtime.sleep()
関数はプログラムの実行を一時停止するためによく使われます。しかし、この関数の精度はOSとハードウェアの性能に依存します。特に、ミリ秒単位で正確な停止時間を必要とする場合、time.sleep()
だけでは期待通りの結果を得られないことがあります。
Pythonのsleep関数の基本的な使い方
Pythonのtime.sleep()
関数はtime
モジュールのメソッドです。引数に停止したい時間(単位は秒)を指定します。1秒よりも短い時間を指定したい場合は、小数を指定します。
import time
time.sleep(0.001) # 0.001秒(=1ミリ秒)待つ
OSのタイマーとsleep関数
time.sleep()
関数の精度はOSのタイマーの精度に左右されます。Windowsのタイマー精度はデフォルトでは約15.625ミリ秒とされています。これは、15ミリ秒以下の時間をtime.sleep()
で停止したくても正確な時間を期待できないということを意味します。
より高精度なsleepを実現する方法
Windowsでは、APIを使ってOSタイマーを変更することができます。これにより、15.625ミリ秒よりも短い時間をtime.sleep()
で停止することが可能になります。
from ctypes import windll
# タイマー精度を1msec単位にする
windll.winmm.timeBeginPeriod(1)
# 1msec単位で処理したい関数(sleep関数等)を記述
# タイマー精度を戻す
windll.winmm.timeEndPeriod(1)
ただし、OSのタイマー精度を変更すると他のプログラムに影響を及ぼす可能性があるため、必要な処理が終わったらタイマー精度をデフォルトの値に戻すことが推奨されています。
以上がPythonで高精度なsleepを実現する方法です。これにより、AIのデモプログラムや実時間が重要なプログラムなど、ミリ秒単位での精度が求められる場面で役立つでしょう。