我一直在尝试用Python制作一个精确计时器,或者说尽可能精确,以操作系统允许的范围为准。但是这比我最初想象的要复杂。
以下是我希望它能够工作的方式:
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”只执行一次,然后脚本在20秒后终止。
另一种方法是创建一个带有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循环中代码执行所需的时间。
有没有一种简单的方法在Python中每秒(或任何间隔)执行一个定时器,而不会引入与系统时间相比的漂移,而无需补偿sleep(n)参数?
谢谢您的帮助,
/Anders