繰り返しタイマーを 5 分間隔でスケジュールするにはどうすればよいですか。00 秒で発火し、00 で繰り返します。わかりました。ハード リアルタイムではありませんが、システム ラグで可能な限り近くなります。ラグの蓄積を避けて 00 に近づけようとしています。
言語: Python、OS: WinXP x64
システムの分解能は 25ms です。
どんなコードでも役に立ちます、tia
threading.Timerよりも正確に行う方法がわかりません。これは「ワンショット」ですが、そのようにスケジュールした関数は、最初に、さらに 300 秒後にすぐに再スケジュールする必要があることを意味します。time.time
(毎回正確な時間を測定し、それに応じて次のスケジュール遅延を変更することで、精度を高めることができます)。
次の 2 つのコード サンプルの時間出力を比較してみてください。
コード例 1
import time
delay = 5
while True:
now = time.time()
print time.strftime("%H:%M:%S", time.localtime(now))
# As you will observe, this will take about 2 seconds,
# making the loop iterate every 5 + 2 seconds or so.
## repeat 5000 times
for i in range(5000):
sum(range(10000))
# This will sleep for 5 more seconds
time.sleep(delay)
コード例 2
import time
delay = 5
while True:
now = time.time()
print time.strftime("%H:%M:%S", time.localtime(now))
# As you will observe, this will take about 2 seconds,
# but the loop will iterate every 5 seconds because code
# execution time was accounted for.
## repeat 5000 times
for i in range(5000):
sum(range(10000))
# This will sleep for as long as it takes to get to the
# next 5-second mark
time.sleep(delay - (time.time() - now))