关于schedulers定时器的疑惑
本帖最后由 云烟成雨 于 2023-3-31 11:26 编辑代码如下:
import time
from apscheduler.schedulers.blocking import BlockingScheduler
scheduler = BlockingScheduler(timezone='Asia/Shanghai')
def main():
print('main:' + datetime.datetime.now().strftime('%H:%M:%S'))
time.sleep(5)
print('wait 5s do something')
scheduler.add_job(main, 'interval', days=0, hours=0, minutes=0, seconds=10);
scheduler.start();
定时执行时间为10秒,定时执行的函数main内部有一个time.sleep延迟,但是这个延迟并没有导致定时器interval的延迟,这个怎么解决?
我希望是main函数下次执行的时间是15秒以后(10秒+main函数内部5秒的延迟),而不是依然是10秒后。(interval的时间间隔不能改写为15秒,因为我不知道程序执行的具体时间是多少,会造成不精确)
因为遇到个问题是我写的程序main内部是需要有time.sleep延迟的,sleep后还需要进行一些代码执行,怎么让interval下次执行的时间间隔在main函数执行结束后的时间开始算起,而不是main函数执行开始时就开始计时了
我目前的解决是改回了使用time.sleep递归的方式定时执行,但是我觉得schedulers应该也可以实现才对,请大佬指教 import time
from apscheduler.schedulers.blocking import BlockingScheduler
import datetime
scheduler = BlockingScheduler(timezone='Asia/Shanghai')
last_executed_time = None
def main():
global last_executed_time
if last_executed_time is not None:
time.sleep(max(0., 10 - time.time() + last_executed_time)) #距离上次完成执行的时间如果不到10秒则等待一段时间
print('main:' + datetime.datetime.now().strftime('%H:%M:%S'))
time.sleep(5)
print('wait 5s do something')
last_executed_time = time.time()
scheduler.add_job(main, 'interval', days=0, hours=0, minutes=0, seconds=10, max_instances=1) #最多运行一个实例
scheduler.start() ~零度 发表于 2023-3-31 15:07
import time
from apscheduler.schedulers.blocking import BlockingScheduler
...
main函数前面加延迟时间啊,变相解决,哈哈哈
页:
[1]