4

我希望每天早上 6 点完成我的主要任务。但出于测试目的,我将间隔设置为 5 秒。问题是它似乎永远不会触发。我在 maintask 方法中有一个断点,该断点从未到达,并且没有任何内容打印到控制台。我假设它没有运行。

ETA:我的代码到达 scheduler.start() 因为它被阻塞而停止。它应该在 5 秒内启动我的主要任务,但它永远不会。

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()
4

1 回答 1

3

问题是您使用scheduled_job的是add_job.

正如用户指南所解释的,scheduled_job主要用作装饰器,作为“声明在应用程序运行时不会更改的作业的便利”,而后者是添加作业的“最常见方式”。

在这种特殊情况下,我认为问题在于add_job强制调度程序唤醒,而scheduled_job不是 - 您认为这无关紧要,除了您依靠唤醒来强制失火的事实检查在启动时运行,而不是明天早上 6 点。

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

于 2014-10-21T23:42:44.110 回答