我想每天早上6点开我的主要任务.但出于测试目的,我将间隔设置为5秒.问题在于它似乎从未解雇.我在maintask方法中有一个断点,从未达到过,并且没有任何内容输出到控制台.我假设它没有运行.
预计到达时间:
我的代码到达了scheduler.start(),该代码由于阻塞而停止了.它应该在5秒钟内启动我的maintask,但永远不会.
python版本是2.7
apscheduler版本是3.0
我已经在Windows和Debian上运行了相同的结果.
这是我的代码.
from apscheduler.schedulers.blocking import BlockingScheduler
import datetime
def maintask():
print("blah")
def main():
scheduler = BlockingScheduler()
print("Scheduling Tasks")
start_time = (datetime.datetime.now()).replace(hour=6, minute=0, second=0, microsecond=0)
scheduler.scheduled_job(maintask, 'interval', id="MainTaskid", name="mainTask", start_date=start_time, seconds=5, misfire_grace_time=60)
print("Tasks Scheduled")
print("Running Tasks")
scheduler.start()
print("Good Bye")
return 0
if __name__ == "__main__":
main()
解决方法:
问题是您使用的是scheduled_job
而不是add_job
.
正如User Guide所解释的那样,schedule_job主要旨在用作装饰器,以“方便地声明在应用程序运行时不更改的作业”,而后者是添加作业的“最常见方式”.
在这种特殊情况下,我认为问题在于add_job会强制调度程序唤醒,而cheduled_job不会—除非您依靠该唤醒来强制执行,否则您认为这并不重要失火检查将在启动时运行,而不是直到明天早上6点.
无论如何,只需将其更改为add_job即可解决该问题.