Выбор ответа Senior Celery и очереди обновлено
Prefetch и долгие задачи
Вопрос
Воркер с concurrency 4 обрабатывает задачи по 10 минут. Другие воркеры простаивают, а у этого очередь задач. Что настроить?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: workerprefetchmultiplier=1 и ackslate, чтобы не брать задачи впрок. По умолчанию воркер забирает из брокера задачи с запасом (prefetch multiplier 4 на каждый процесс), чтобы не простаивать на коротких задачах.
Варианты ответа
- Увеличить
worker_prefetch_multiplierдо 100, чтобы воркеры брали больше - Отключить брокер и запускать задачи напрямую через HTTP между воркерами
- Перейти на пул
solo, чтобы каждый воркер выполнял одну задачу за раз worker_prefetch_multiplier=1иacks_late, чтобы не брать задачи впрокправильный ответ
Разбор
По умолчанию воркер забирает из брокера задачи с запасом (prefetch multiplier 4 на каждый процесс), чтобы не простаивать на коротких задачах. С долгими задачами это ведёт к перекосу: зарезервированные задачи ждут у занятого воркера. Multiplier 1 вместе с acks_late заставляет брать задачу только когда процесс свободен. Пул solo выполняет по одной задаче на воркер и проблему не решает.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.