PRO

Что такое Celery? Для чего используется?

Celery — библиотека Python для выполнения задач в фоне. Приложение передаёт задачу брокеру сообщений, а отдельный процесс-исполнитель получает и выполняет её вне HTTP-запроса; Celery используют для писем, обработки файлов, уведомлений, интеграций и задач по расписанию.
Подробный ответ

Зачем нужен Celery

Некоторые операции занимают много времени: отправка письма, создание отчёта, обработка изображения, запрос к внешнему сервису или массовая рассылка. Если выполнять их прямо в HTTP-запросе, пользователь будет долго ждать ответ, а веб-приложение будет удерживать ресурсы.

Как устроена работа

Web application
  |
  | put task into queue
  v
Message broker
  |
  | take task from queue
  v
Celery executor
  |
  v
Result storage, optional
  • приложение ставит задачу в очередь;

  • брокер сообщений временно хранит и передаёт задачу;

  • исполнитель Celery получает задачу и выполняет её отдельно от web-приложения;

  • хранилище результатов необязательно и нужно только если приложению требуется узнать статус или результат задачи.

Пример задачи

from celery import shared_task


@shared_task
def send_welcome_email(user_id: int) -> None:
    user = get_user(user_id)
    send_email(
        to=user.email,
        subject='Добро пожаловать',
        body='Спасибо за регистрацию',
    )

Постановка задачи

send_welcome_email.delay(user.id)

Для чего используют

  • отправка email и уведомлений;

  • обработка загруженных файлов, изображений и видео;

  • генерация отчётов и экспортов;

  • синхронизация с внешними сервисами;

  • задачи по расписанию через Celery Beat.

Что важно учитывать

Задача может быть выполнена повторно после сбоя, поэтому её желательно делать идемпотентной. В задачу лучше передавать простые данные или идентификаторы, а не тяжёлые объекты. Также нужны retries с задержкой, ограничение времени выполнения и логирование ошибок.

Как ответить на собеседовании

Celery выполняет фоновые задачи вне HTTP-запроса. Приложение ставит задачу в брокер сообщений, отдельный исполнитель получает её и запускает. Я использую Celery для писем, обработки файлов, отчётов и интеграций. Задачи делаю идемпотентными, передаю в них идентификаторы, добавляю retries и контролирую время выполнения.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге