Ответ
Celery — это распределенная очередь задач для Python, предназначенная для выполнения ресурсоемких или долгих операций асинхронно, в фоновом режиме. Это позволяет веб-приложению (например, на Django или Flask) быстро отвечать на запрос пользователя, не дожидаясь завершения тяжелой задачи.
Основная задача — разгрузить основной поток приложения, передав выполнение функций специальным фоновым процессам (воркерам).
Ключевые компоненты:
- Клиент (Приложение): Инициирует выполнение задачи.
- Брокер сообщений (Message Broker): Хранилище для задач. Принимает задачи от клиента и передает их воркерам. Популярные брокеры: RabbitMQ, Redis.
- Воркер (Worker): Фоновый процесс, который забирает задачи из очереди и выполняет их.
- Бэкенд результатов (Result Backend): Опциональное хранилище для сохранения статуса и результатов выполнения задач (например, Redis, база данных).
Пример использования:
Предположим, нужно отправить письмо после регистрации пользователя. Отправка может занять несколько секунд и заблокировать ответ.
# tasks.py
from celery import Celery
import time
# Инициализация Celery с указанием брокера (Redis)
app = Celery('tasks', broker='redis://localhost:6379/0')
@app.task
def send_confirmation_email(user_id):
# Имитация долгой операции
print(f"Начинаем отправку письма для пользователя {user_id}...")
time.sleep(5)
print(f"Письмо для пользователя {user_id} отправлено.")
return True
# В коде вашего веб-приложения
# from tasks import send_confirmation_email
# Немедленно возвращает управление, задача выполняется в фоне
# send_confirmation_email.delay(new_user.id)
Для запуска воркера используется команда:
celery -A tasks worker --loglevel=info