私はPythonで正確なタイマーを作ろうとしているか、OSが許す限り正確にしようとしています。しかし、当初考えていたよりも複雑なようです。
これは私がそれをどのように機能させたいかです:
from time import sleep
from threading import Timer
def do_this():
print ("hello, world")
t = Timer(4, do_this)
t.start()
sleep(20)
t.cancel()
20 秒間、4 秒ごとに「do_this」を実行します。ただし、「do_this」は 1 回実行され、スクリプトは 20 秒後に終了します。
もう 1 つの方法は、while ループを使用してスレッドを作成することです。
import time
import threading
import datetime
shutdown_event = threading.Event()
def dowork():
while not shutdown_event.is_set():
print(datetime.datetime.now())
time.sleep(1.0)
def main():
t = threading.Thread(target=dowork, args=(), name='worker')
t.start()
print("Instance started")
try:
while t.isAlive():
t.join(timeout=1.0)
except (KeyboardInterrupt, SystemExit):
shutdown_event.set()
pass
if __name__ == '__main__':
main()
このスレッドは期待どおりに実行されますが、タイミング ドリフトが発生します。この場合、それに応じてスリープを調整することにより、while ループでコードを実行するのにかかる時間を補正する必要があります。
sleep(n) パラメータを補正することなく、システム時間と比較してドリフトを導入することなく、毎秒 (または任意の間隔で) タイマーを実行する簡単な方法は Python にありますか?
助けてくれてありがとう、
/アンダース