Celery — это асинхронный распределенный механизм очередей задач, который позволяет выносить фоновые задачи за пределы основного потока выполнения приложения.
Фоновые задачи:
Планировщик задач:
Распределенные вычисления:
from celery import Celery
# Инициализация Celery
app = Celery(
'tasks',
broker='pyamqp://guest@localhost//',
backend='rpc://'
)
# Определение задачи
@app.task
def add(x, y):
return x + y
# Запуск задачи асинхронно
result = add.delay(4, 4)
print(result.get()) # Получаем результат (8)
Клиент (Client):
result = task.delay(args)
Воркер (Worker):
celery -A tasks worker --loglevel=INFO
Цветы (Flower) - мониторинг задач:
celery -A tasks flower
from celery import chain
# Задачи выполняются последовательно
chain(add.s(2, 2), add.s(4), add.s(8))()
from celery import group
# Параллельное выполнение
group(add.s(i, i) for i in range(10))()
from celery.schedules import crontab
app.conf.beat_schedule = {
'every-monday-morning': {
'task': 'tasks.send_weekly_report',
'schedule': crontab(hour=7, minute=30, day_of_week=1),
},
}
Установка:
pip install celery django-celery-results
Настройка в settings.py
:
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'django-db'
Создание задачи:
from celery import shared_task
@shared_task
def send_email_task(user_id):
user = User.objects.get(id=user_id)
user.email_user("Subject", "Message")
celery -A proj inspect active
Celery — это мощный инструмент для управления фоновыми задачами в Python-приложениях, особенно полезный в веб-разработке (Django/Flask) и data processing pipelines. Он обеспечивает надежное выполнение задач, масштабируемость и гибкое планирование, но требует настройки инфраструктуры (брокер сообщений и воркеры).