Я пытаюсь протестировать пропущенные задачи с помощью APScheduler, но я не вижу запуска пропущенных задач при перезапуске APScheduler. Я настроил APScheduler следующим образом:
scheduler.py
def configure_scheduler():
jobstores = {
'default': SQLAlchemyJobStore(url=config('DATABASE_URL'))
}
sched = BlockingScheduler()
sched.configure(jobstores=jobstores)
sched.add_job(
test_task,
id='test_task',
'interval',
hours=1,
coalesce=True,
max_instances=1,
misfire_grace_time=360,
replace_existing=True
)
return sched
if __name__ == '__main__':
scheduler = configure_scheduler()
scheduler.start()
Когда я запускаю планировщик в первый раз, test_task
добавляется к apscheduler_jobs
таблица в моей базе данных Postgres с next_run_time
одного часа с момента запуска планировщика. Затем я пытаюсь проверить пропуски зажигания путем:
- Изменение
next_run_time
в моей базе данных на текущее время - Ожидание 15 секунд
- Запуск планировщика
Когда я следую этой процедуре, next_run_time
снова устанавливается на час от текущего времени. next_run_time
представляется обновленным в методе update_job
хранилища заданий SQLAlchemy. Я видел один похожий вопрос , связанный с тем, что постоянные задачи хранилища заданий не запускаются после пропуска зажигания. Решение большинства других вопросов , которое я видел, заключается в добавлении аргумента misfire_grace_time
к add_job
. Я пробовал это в соответствии с моей конфигурацией выше, но мне не повезло с выполнением пропущенных заданий при запуске планировщика. Я что-то упустил из-за того, как взаимодействуют аргументы replace_existing
и misfire_grace_time
? Нужно ли вручную проверять, не было ли next_run_time
каких-либо заданий в прошлом, а затем запускать эти задания перед запуском планировщика?
Я использую v3.6.1 библиотеки APScheduler.
Для дополнительного контекста, я буду развертывать планировщик на Heroku, и я пытаюсь обойти автоматический цикличный режим Heroku , который происходит по крайней мере один раз в день.