我一直试图在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”执行一次,然后脚本在20秒后终止。
另一种方法是用while循环创建thred。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)参数?
谢谢你的帮助
/安德斯