Какую роль выполняет backend в архитектуре Celery

Ответ

В Celery backend (или result backend) — это хранилище, используемое для сохранения состояния и результатов выполнения задач.

Без backend воркеры Celery выполняют задачи по принципу "fire-and-forget" (выполнил и забыл), и у клиента нет способа узнать, завершилась ли задача и какой у неё результат.

Основные функции backend:

  • Хранение результата: Сохраняет возвращаемое значение выполненной задачи.
  • Отслеживание состояния: Позволяет проверять текущий статус задачи (например, PENDING, SUCCESS, FAILURE).
  • Получение метаданных: Хранит дополнительную информацию, например, стектрейс в случае ошибки.

В качестве backend могут выступать Redis, RabbitMQ (через RPC), PostgreSQL, Memcached и другие системы.

Пример использования:

from celery import Celery

# Указываем и брокер, и backend. Часто это одна и та же система, например, Redis.
app = Celery(
    'tasks', 
    broker='redis://localhost:6379/0',
    backend='redis://localhost:6379/0' 
)

@app.task
def add(x, y):
    return x + y

# Запускаем задачу асинхронно
result = add.delay(4, 5)

# Блокирующая операция, которая ждет результат. 
# Вызовет ошибку, если backend не настроен.
print(f"Результат задачи: {result.get(timeout=1)}") 
print(f"Статус задачи: {result.status}")