Django + Celery
Celery позволяет выполнять асинхронные и периодические задачи в Django приложениях.
Установка
Настройка 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}
Мониторинг задач
FAQ
Q: Как мониторить задачи?
A: Используй Flower или django-celery-monitor.
Q: Можно ли использовать без Redis?
A: Да, поддерживаются другие брокеры: RabbitMQ, Amazon SQS.