Ответ
В 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}")