次の実行がいつになるかがわかっている場合は、次のように簡単に使用できますtime.sleep
。
import time
interval = 5
next_run = 0
while True:
time.sleep(max(0, next_run - time.time()))
next_run = time.time() + interval
action_print()
他のスレッドが割り込みできるようにしたい場合は、次のようなイベントを使用します。
import time,threading
interval = 5
next_run = 0
interruptEvent = threading.Event()
while True:
interruptEvent.wait(max(0, next_run - time.time()))
interruptEvent.clear()
next_run = time.time() + interval
action_print()
別のスレッドを呼び出しinterruptEvent.set()
て、自分のスレッドをウェイクアップできるようになりました。
多くの場合、共有データの競合状態を回避するためにロックも使用する必要があります。ロックを保持している間に必ずイベントをクリアしてください。
また、cpython では、Python コードを実行できるスレッドは 1 つだけであることにも注意してください。したがって、プログラムが複数のスレッドで CPU バウンドであり、cpython または pypy を使用している場合はthreading
、multiprocessing
.