Выбор ответа Senior Celery и очереди обновлено

visibility_timeout у Redis-брокера

Вопрос

Задачи с countdown на 3 часа при Redis-брокере выполняются по несколько раз. В чём причина?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Неподтверждённое сообщение возвращается после visibilitytimeout (1 час). Задачи с eta и countdown воркер забирает заранее и держит неподтверждёнными до времени выполнения.

Варианты ответа

  1. Redis теряет сообщения при перезапуске, и Celery ставит их заново из бэкапа
  2. Countdown больше часа не поддерживается, и Celery дробит его на повторы
  3. Неподтверждённое сообщение возвращается после visibility_timeout (1 час)правильный ответ
  4. Beat повторяет задачи с countdown, если они не завершились за час

Разбор

Задачи с eta и countdown воркер забирает заранее и держит неподтверждёнными до времени выполнения. Если ожидание дольше visibility_timeout, Redis-транспорт считает задачу потерянной и отдаёт её другому воркеру, и возникают дубли. Решения: увеличить visibility_timeout больше максимального отложенного времени, хранить отложенные действия в базе и ставить задачу ближе к сроку, делать задачи идемпотентными. Beat к countdown отношения не имеет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.