我有一个单位的任务,我希望每N秒执行一次。如果我使用简单的方法:
minute = 60
while True:
doSomeWork()
time.sleep(minute)
根据doSomeWork()
所需的时间长短,真正的循环周期将是一分钟加上那个时间。如果doSomeWork()
所需时间不确定,那么工作的周期就更加不可预测。
我想做的事情类似于这样
minute = 60
start = time.process_time() #? i can imagine using this, but maybe there's something better?
while True:
doSomeWork()
start += minute
sleep_until(start) #? this is the function I'm in search of
我正在使用Python 3.3。
更新:
在Linux/OSX上,我可以使用信号中的itimer来实现我想要的功能:
import signal
import datetime
def tick(_, __):
# doSomeWork()
print(datetime.datetime.now())
signal.setitimer(signal.ITIMER_REAL, 60, 60)
signal.signal(signal.SIGALRM, tick)
while True:
signal.pause()
看起来为Python3.4开发的郁金香工具也会使这个过程变得容易。