如果您知道下一次运行的时间,您可以简单地使用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()
来唤醒您的线程。
在许多情况下,您还需要使用Lock来避免共享数据的竞争条件。确保在保持锁定时清除事件。
您还应该知道,在 cpython 下,只有一个线程可以执行 Python 代码。因此,如果您的程序在多个线程上受 CPU 限制,并且您使用的是 cpython 或 pypy,则应替换threading
为multiprocessing
.