Le framework de tâches en arrière-plan

Django 6.0 intègre un framework de tâches en arrière-plan directement dans le noyau. Pour les cas d'usage simples (envoi d'e-mails, nettoyage, notifications), il n'est plus nécessaire d'installer Celery ou RQ : Django le fait nativement avec une base de données comme broker.

Configuration et utilisation

Le système utilise la base de données existante comme file d'attente. On définit une tâche avec le décorateur @task et on la lance avec .enqueue(). Un worker intégré consomme les tâches.

python
# settings.py
INSTALLED_APPS = [
    ...
    'django.contrib.tasks',
]

# Après : python manage.py migrate
# Lancer le worker : python manage.py taskworker
python
# tasks.py
from django.contrib.tasks import task
from django.core.mail import send_mail


@task
def envoyer_email_bienvenue(user_id: int):
    """Envoi d'un e-mail de bienvenue en arrière-plan."""
    from django.contrib.auth import get_user_model
    User = get_user_model()
    user = User.objects.get(pk=user_id)
    send_mail(
        subject="Bienvenue !",
        message=f"Bonjour {user.first_name}, bienvenue sur notre site.",
        from_email="noreply@example.com",
        recipient_list=[user.email],
    )


# views.py
from .tasks import envoyer_email_bienvenue

def inscription(request):
    user = creer_utilisateur(request.POST)
    # La tâche est mise en file, la réponse est immédiate
    envoyer_email_bienvenue.enqueue(user.id)
    return redirect('accueil')

Celery vs tâches intégrées

Le framework intégré est conçu pour les cas simples. Celery reste pertinent pour les workflows complexes, le routage de tâches, les retries avancés et les brokers haute performance (Redis, RabbitMQ).

Sources