PRO

Что такое celery в связке с Django? Как запустить фоновую задачу?

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

Зачем нужен Celery

Долгие операции не стоит выполнять внутри HTTP-запроса: пользователь будет ждать ответ, а веб-процесс окажется занят. Celery выносит такие задачи в отдельные worker-процессы.

Основные компоненты

  • Django-приложение создаёт задачу;

  • broker, например Redis или RabbitMQ, хранит очередь задач;

  • Celery worker получает и выполняет задачи;

  • result backend при необходимости хранит статусы и результаты.

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

from celery import shared_task


@shared_task
def send_welcome_email(user_id):
    # Получение пользователя и отправка письма
    return user_id

Как поставить задачу в очередь

send_welcome_email.delay(user.id)

Минимальная конфигурация

В проекте создают экземпляр Celery, обычно в файле celery.py, настраивают broker URL в settings.py и запускают worker отдельной командой.

celery -A config worker -l info

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

Задачи должны быть идемпотентными, потому что при сбоях они могут запускаться повторно. Не стоит передавать в задачу тяжёлые объекты моделей: надёжнее передавать идентификаторы и получать данные уже внутри worker.

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

Celery выполняет фоновые задачи вне веб-запроса. Я описываю задачу через @shared_task, вызываю её с .delay(), а отдельный worker получает её из Redis или RabbitMQ и выполняет асинхронно.

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

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