我希望我的主要任务每天早上6点开火。但出于测试目的,我将间隔设置为5秒。问题是它似乎永远不会发生。我在maintask方法中有一个从未到达的断点,并且没有任何内容被打印到控制台。我假设它没有运行。
ETA: 我的代码到达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()
答案 0 :(得分:3)
问题是您使用的是scheduled_job
而不是add_job
。
正如User Guide所解释的那样,scheduled_job
主要用作装饰器,“用于声明在应用程序运行时不会改变的作业”,而后者是“增加就业机会的最常见方式。”
在这种特殊情况下,我认为问题是add_job
迫使调度程序唤醒,而scheduled_job
不会 - 你不认为这是相关的,除了事实上,你依靠这种唤醒来迫使失火检查在启动时运行,而不是直到明天早上6点。
无论如何,只需将其更改为add_job
即可解决问题。