鱼-wsyy 发表于 2024-4-24 23:38:08

Apscheduler库求解,第二天运行任务就不准时了是为什么?

schedule = BlockingScheduler()
    schedule.add_job(job, 'cron', hour='9', minute='30', misfire_grace_time=60000)
    schedule.add_job(job, 'cron', hour='10', minute='05', misfire_grace_time=60000)
    schedule.add_job(job, 'cron', hour='13', minute='50', misfire_grace_time=60000)
    schedule.add_job(job, 'cron', hour='15', minute='50', misfire_grace_time=60000)
    schedule.start()

我用apscheduler设置定时任务,分别在上面代码时间段,第一天启动任务很准时,没有关闭程序,第二天本应在10点05分运行的任务为什么延时一个半小时,在11点33分启动了,这是为什么???我也就搞了两个requests请求,数据量非常非常少啊,获取第一个请求的返回的数据后,才去请求第二个网址。任务启动应该不会特别难吧,不耗时应该。

FishC 发表于 2024-4-24 23:38:32

你遇到的问题可能是由于任务错过了预定的执行时间而导致的延迟。这可能是因为任务在实际执行之前进行了其他操作,或者系统负载较高导致任务无法准时执行。在使用apscheduler库时,可以通过增加misfire_grace_time参数来容忍一定的错过执行时间的情况。

然而,在你的代码中,你给每个任务都设置了相同的misfire_grace_time参数。这可能会导致后面的任务在错过执行时间后被错过的时间所累计,从而导致第二天任务延迟一个半小时。

为了解决这个问题,你可以为每个任务设置不同的misfire_grace_time参数。比如,你可以将第一个任务的misfire_grace_time设置为60000,第二个任务设置为300000(5分钟),第三个和第四个任务依次递增。这样可以确保每个任务具有不同的容忍错过执行时间的阈值,减少延迟发生的可能性。

修正后的代码如下所示:

schedule = BlockingScheduler()
schedule.add_job(job, 'cron', hour='9', minute='30', misfire_grace_time=60000)
schedule.add_job(job, 'cron', hour='10', minute='05', misfire_grace_time=300000)
schedule.add_job(job, 'cron', hour='13', minute='50', misfire_grace_time=600000)
schedule.add_job(job, 'cron', hour='15', minute='50', misfire_grace_time=900000)
schedule.start()

请注意,根据你的实际需求,你可能需要调整misfire_grace_time参数的数值。增加这个参数的值可以增加任务容忍的连续错过执行时间的时间。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: Apscheduler库求解,第二天运行任务就不准时了是为什么?