Как устроен Celery
Вопрос
Расскажите, как устроен Celery и как вы его настраиваете в проекте.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Брокер, воркеры, result backend, beat
Пулы воркеров: prefork, threads, gevent; concurrency
Разные очереди для разных типов задач, маршрутизация
Сериализация JSON, передача id
Ретраи, лимиты времени, ignore_result
Мониторинг: Flower, метрики очередей
Что могут спросить следом
- Зачем разделять задачи по очередям?
- Когда Celery избыточен и что взять вместо него?
Разбор
Образцовый ответ: «Веб-приложение отправляет сообщение о задаче в брокер, обычно RabbitMQ или Redis. Воркеры Celery слушают очереди, забирают сообщения и выполняют функции-задачи. Результаты, если они нужны, пишутся в result backend, но чаще результат не нужен, и я ставлю ignore_result. Периодические задачи запускает beat, строго один экземпляр. Задачи разношу по очередям: быстрые письма отдельно от тяжёлых отчётов, чтобы долгий отчёт не задерживал письма, и под каждую очередь свои воркеры с подходящей concurrency. Пул по умолчанию prefork, для I/O-задач иногда threads или gevent. Сериализатор JSON, в задачи передаю id. На задачи вешаю ретраи временных ошибок и лимиты времени. Мониторю через Flower и метрики длины очередей. Если задачи простые и проект небольшой, Celery может быть избыточен: хватит RQ или Dramatiq, а в asyncio-проекте arq или Taskiq».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.