Выбор ответа Senior Celery и очереди обновлено
visibility_timeout у Redis-брокера
Вопрос
Задачи с countdown на 3 часа при Redis-брокере выполняются по несколько раз. В чём причина?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Неподтверждённое сообщение возвращается после visibilitytimeout (1 час). Задачи с eta и countdown воркер забирает заранее и держит неподтверждёнными до времени выполнения.
Варианты ответа
- Redis теряет сообщения при перезапуске, и Celery ставит их заново из бэкапа
- Countdown больше часа не поддерживается, и Celery дробит его на повторы
- Неподтверждённое сообщение возвращается после
visibility_timeout(1 час)правильный ответ - Beat повторяет задачи с countdown, если они не завершились за час
Разбор
Задачи с eta и countdown воркер забирает заранее и держит неподтверждёнными до времени выполнения. Если ожидание дольше visibility_timeout, Redis-транспорт считает задачу потерянной и отдаёт её другому воркеру, и возникают дубли. Решения: увеличить visibility_timeout больше максимального отложенного времени, хранить отложенные действия в базе и ставить задачу ближе к сроку, делать задачи идемпотентными. Beat к countdown отношения не имеет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.