Celery — это очередь задач для выполнения работы в фоне: отправки писем, обработки файлов, уведомлений и интеграций. Django-приложение ставит задачу в брокер сообщений, а Celery worker забирает её и выполняет вне HTTP-запроса.
Что такое celery в связке с Django? Как запустить фоновую задачу?
Подробный ответ
Зачем нужен 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 и выполняет асинхронно.
Оцени свой прогресс