Что такое Celery и для каких задач его применяют

Ответ

Celery — это мощная, распределенная очередь задач для Python, предназначенная для выполнения операций асинхронно, вне основного потока приложения (например, веб-сервера).

Архитектура Celery состоит из:

  • Клиент (Client): Ваше приложение, которое создает и отправляет задачи в очередь.
  • Брокер сообщений (Message Broker): Система вроде RabbitMQ или Redis, которая принимает задачи от клиента и хранит их до тех пор, пока worker не будет готов их обработать.
  • Исполнитель (Worker): Процесс, который забирает задачи из очереди и выполняет их.
  • Бэкенд результатов (Result Backend): Опциональное хранилище (например, Redis, база данных) для сохранения результатов выполнения задач.

Основные сценарии использования:

  1. Выполнение долгих операций в фоне: Чтобы не блокировать HTTP-запрос пользователя (например, обработка видео, генерация отчетов, отправка email-рассылки).
  2. Отложенные задачи: Выполнение задачи в определенное время в будущем (task.apply_async(countdown=60)).
  3. Периодические задачи (Crontab): Регулярное выполнение задач по расписанию с помощью Celery Beat (например, ежедневный сбор статистики).

Пример:

from celery import Celery
import time

# Инициализация Celery с указанием брокера (Redis)
app = Celery('tasks', broker='redis://localhost:6379/0')

# Декоратор @app.task превращает функцию в задачу Celery
@app.task
def send_confirmation_email(user_id):
    """Имитация долгой задачи по отправке письма."""
    print(f"Начинаем отправку письма пользователю {user_id}...")
    time.sleep(10) # Имитация сетевой задержки
    print(f"Письмо для пользователя {user_id} успешно отправлено.")
    return True

# В коде вашего веб-приложения задача вызывается асинхронно:
# Метод .delay() - это сокращение для .apply_async()
# Он немедленно возвращает управление, а задача выполняется в фоне worker'ом.
# send_confirmation_email.delay(123)