apscheduler interval任务未运行

时间:2014-10-21 22:36:52

标签: python apscheduler

我希望我的主要任务每天早上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()

1 个答案:

答案 0 :(得分:3)

问题是您使用的是scheduled_job而不是add_job

正如User Guide所解释的那样,scheduled_job主要用作装饰器,“用于声明在应用程序运行时不会改变的作业”,而后者是“增加就业机会的最常见方式。”

在这种特殊情况下,我认为问题是add_job迫使调度程序唤醒,而scheduled_job不会 - 你不认为这是相关的,除了事实上,你依靠这种唤醒来迫使失火检查在启动时运行,而不是直到明天早上6点。

无论如何,只需将其更改为add_job即可解决问题。