Интервал задач апшедулера не запущен

Я хотел бы, чтобы моя главная задача стреляла в 6 утра каждый день. но для целей тестирования я установил интервал в 5 секунд. Проблема в том, что он никогда не срабатывает. У меня есть точка останова в методе maintask, которая никогда не достигается и ничего не выводится на консоль. Я предполагаю, что это не работает.

ETA: мой код попадает в scheduler.start(), где останавливается, потому что он блокируется. это должно начать мою maintask через 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()

1 ответ

Решение

Проблема в том, что вы используете scheduled_job вместо add_job,

Как объясняет руководство пользователя, scheduled_job в основном предназначен для использования в качестве декоратора как "удобство для объявления заданий, которые не изменяются во время выполнения приложения", тогда как последний является "наиболее распространенным способом" добавления заданий.

В данном конкретном случае я считаю, что проблема в том, что add_job заставляет планировщик проснуться, и scheduled_job нет - что, по вашему мнению, не имеет значения, за исключением того факта, что вы полагаетесь на это пробуждение, чтобы принудительно запустить проверку пропуска зажигания при запуске, а не до 6 утра завтра.

Во всяком случае, просто изменив его на add_job решает проблему.

Другие вопросы по тегам