APScheduler. Каковы оптимальные методы выключения планировщиков с любой не памятью?

Мне нужно запустить планировщик, распределенный по многим машинам и имеющий одну единственную точку для хранения заданий. Я использую Redis для этой цели, и мой код выглядит следующим образом:

jobstores = {'default': {'type': 'redis'}}
scheduler = BlockingScheduler(jobstores=jobstores)
scheduler.add_job(...)

Когда я помещаю работу в планировщик и вызываю .start() это добавить рабочие места в Redis. Но когда я запускаю другой экземпляр моего планировщика или когда я останавливаю текущий и снова запускаю его, планировщик добавляет больше заданий в redis (не выполняет очистку).

Поэтому у меня есть этот вопрос. Как лучше всего делать такие вещи?

Заранее спасибо.

1 ответ

Решение

Вы должны использовать replace_existing=True вариант при добавлении новой работы для этого вида использования.

Из документации:

Если вы планируете задания в постоянном хранилище заданий во время инициализации приложения, вы ДОЛЖНЫ определить явный идентификатор задания и использовать его. replace_existing=True или вы будете получать новую копию задания каждый раз, когда ваше приложение перезапускается!

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