Как в Django выполнять background job
Python
Senior
Без компании
Как в Django выполнять background job
Ответы
Для выполнения фоновых задач в Django есть несколько популярных подходов:
- **Celery** - наиболее мощное решение для асинхронных задач. Требует брокера сообщений (RabbitMQ, Redis). Пример:
```
# tasks.py
from celery import shared_task
@shared_task
def send_email_task(user_id):
user = User.objects.get(id=user_id)
send_email(user.email, "Welcome!")
```
- **Django Background Tasks** - более простое решение, хранит задачи в БД:
```
from background_task import background
@background(schedule=60)
def notify_user(user_id):
user = User.objects.get(id=user_id)
user.send_notification()
```
- **RQ (Redis Queue)** - легковесная альтернатива Celery:
```
import django_rq
def send_report():
# generate report
return "Done"
django_rq.enqueue(send_report)
```
Для простых задач можно использовать:
- `threading` (не рекомендуется для прода)
- `asyncio` (Django 3.1+)
- Планировщик `cron` + management commands
Выбор зависит от сложности задач, требований к масштабируемости и инфраструктуры. Celery - самый надежный вариант для продакшена.