Идентификаторы заданий apscheduler: почему заданиям разрешено использовать общие идентификаторы?

Я работаю над приложением Flask, которое использует BackgroundScheduler. Одна из функций приложения - отправить запрос, который планирует задание на определенную дату, но только в том случае, если на этот день работы еще нет. Итак, я решил, что могу положиться на уникальность параметра job id ... Однако похоже, что это не обязательно.

Вот супер простой пример добавления двух заданий с одним и тем же id в планировщик:

from apscheduler.schedulers.background import BackgroundScheduler

scheduler = BackgroundScheduler()


def hello():
    print "Hello!"


def goodbye():
    print "Goodbye!"

scheduler.add_job(hello, trigger='interval', seconds=5, id='1')
scheduler.add_job(goodbye, trigger='interval', seconds=5, id='1')

print scheduler.get_jobs()
print scheduler.get_job('1')

который выводит

[<Job (id=1 name=hello)>, <Job (id=1 name=goodbye)>]
hello (trigger: interval[0:00:05], pending)

Я ожидал, что это приведет к ошибке из-за конфликтующих идентификаторов. Но вместо этого регистрируются оба задания, и при запросе конкретного идентификатора задания возвращается только первое.

Кроме того, установка для параметра replace_existing значения True, похоже, не заменяет задание.

Я упустил что-то жизненно важное, например настройку магазина заданий?

Кажется законным вопросом!

Mohit Solanki 10.08.2018 15:51
1
1
1 708
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда ваш планировщик не запущен, он добавляет задание в некоторый список pending_job, который не имеет проверки, это может быть ошибка или предполагаемая, я не знаю, но вы можете проверить это, сначала запустив планировщик, а затем добавив задания, которые вы получит ConflictingIdError.

Похоже, причина того, что он не работал, заключалась в том, что планировщик не запускался во время моих модульных тестов!

turnip 13.08.2018 12:39

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