Ответ вслух Middle Celery и очереди обновлено

Как устроен Celery

Вопрос

Расскажите, как устроен Celery и как вы его настраиваете в проекте.

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

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

Коротко

Образцовый ответ: «Веб-приложение отправляет сообщение о задаче в брокер, обычно RabbitMQ или Redis. Воркеры Celery слушают очереди, забирают сообщения и выполняют функции-задачи.

Что должно прозвучать в ответе

  • Брокер, воркеры, 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 ошибок.