Django + Celery

Celery позволяет выполнять асинхронные и периодические задачи в Django приложениях.

Установка

1# Установка пакета
2pip install celery redis
1# Или через Poetry
2poetry add celery redis

Настройка Celery

 1# celery.py
 2import os
 3from celery import Celery
 4
 5os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
 6
 7app = Celery('myproject')
 8app.config_from_object('django.conf:settings', namespace='CELERY')
 9app.autodiscover_tasks()
10
11# settings.py
12CELERY_BROKER_URL = 'redis://localhost:6379/0'
13CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

Создание задач

 1# tasks.py
 2from celery import shared_task
 3from django.core.mail import send_mail
 4
 5@shared_task
 6def send_email_task(subject, message, recipient_list):
 7    send_mail(subject, message, 'from@example.com', recipient_list)
 8    return 'Email sent successfully'
 9
10# Использование
11from .tasks import send_email_task
12send_email_task.delay('Hello', 'Test message', ['user@example.com'])

Периодические задачи

 1# celery.py
 2from celery.schedules import crontab
 3
 4app.conf.beat_schedule = {
 5    'send-daily-report': {
 6        'task': 'myapp.tasks.send_daily_report',
 7        'schedule': crontab(hour=9, minute=0),  # Каждый день в 9:00
 8    },
 9    'cleanup-old-files': {
10        'task': 'myapp.tasks.cleanup_old_files',
11        'schedule': crontab(hour=2, minute=0),  # Каждый день в 2:00
12    },
13}

Мониторинг задач

1# Запуск worker
2celery -A myproject worker -l info
3
4# Запуск beat scheduler
5celery -A myproject beat -l info
6
7# Мониторинг с Flower
8pip install flower
9celery -A myproject flower

FAQ

Q: Как мониторить задачи?
A: Используй Flower или django-celery-monitor.

Q: Можно ли использовать без Redis?
A: Да, поддерживаются другие брокеры: RabbitMQ, Amazon SQS.