Ответ
Celery — это распределенная очередь задач для Python. Её основная цель — выполнение длительных или ресурсоемких операций асинхронно, чтобы не блокировать основной поток приложения (например, веб-сервера).
Основные сценарии использования:
- Отправка email или push-уведомлений.
- Обработка изображений или видео (создание превью, конвертация).
- Выполнение периодических задач по расписанию (Celery Beat).
- Взаимодействие с медленными внешними API.
Пример: Запуск простой задачи сложения
1. Установка зависимостей
В качестве брокера сообщений будем использовать Redis.
pip install celery redis
2. Определение задачи (tasks.py)
from celery import Celery
import time
# Инициализация Celery с указанием имени приложения и URL брокера
app = Celery('tasks', broker='redis://localhost:6379/0')
@app.task
def add(x, y):
"""Простая задача, которая складывает два числа."""
time.sleep(5) # Имитация долгой операции
return x + y
3. Запуск worker'а
Worker — это процесс, который слушает очередь и выполняет задачи по мере их поступления. Запускается из терминала:
celery -A tasks worker --loglevel=info
4. Вызов задачи из другого скрипта
from tasks import add
# .delay() ставит задачу в очередь и немедленно возвращает объект AsyncResult
result = add.delay(4, 6)
print(f"Задача {result.id} отправлена в очередь.")
# Чтобы дождаться и получить результат (блокирующая операция):
# final_result = result.get(timeout=10)
# print(f"Результат: {final_result}")
Ключевые компоненты:
- Task: Функция, декорированная
@app.task. - Broker (Брокер): Посредник (Redis, RabbitMQ), который хранит задачи в очереди.
- Worker (Воркер): Процесс, который забирает задачи из очереди и выполняет их.
- Backend (Бэкенд): Опциональное хранилище для результатов выполнения задач.