Utilisez Celery Redis Django pour optimiser le processus de traitement des tâches asynchrones d'un site Web
Avant-propos :
Lors du développement de sites Web, nous rencontrons souvent des opérations fastidieuses, telles que l'envoi d'e-mails, la génération de rapports, l'exploration de données, etc. Si ces opérations sont synchrones, l'utilisateur se figera en attendant la fin de l'opération, ce qui dégradera l'expérience utilisateur. Afin de résoudre ce problème, vous pouvez utiliser des tâches asynchrones pour gérer des opérations fastidieuses, et Celery est actuellement un framework de traitement de tâches asynchrones Python populaire.
Celery est un cadre de file d'attente de tâches distribué qui peut mettre des tâches dans la file d'attente et les exécuter de manière asynchrone par les nœuds de travail Celery (Workers), réalisant ainsi une exécution asynchrone des tâches. Dans l'utilisation de Celery, Redis est un courtier de messages (Broker) couramment utilisé, utilisé pour exécuter les tâches Celery.
Afin de mieux démontrer l'utilisation de Celery Redis Django, cet article prendra comme exemple une fonction d'envoi d'emails. Ce qui suit sera divisé en parties suivantes pour expliquer :
1. Préparation de l'environnement
2. Installer Celery et Redis
3. Configurer Celery
4. Implémenter des tâches asynchrones dans Django
5. Démarrer Celery Worker
6. Écrire des modules de test
7. Exécution des tests et résumé
1. Préparation de l'environnement
Avant de commencer le développement, vous devez vous assurer que Python, Django et Redis ont été installés. S'il n'est pas installé, vous pouvez l'installer via pip.
2. Installez Celery et Redis
$ pip install celery
$ pip install redis
3 Configurez Celery
Ajoutez la configuration suivante dans le fichier settings.py du projet Django :
BROKER_URL. = 'redis ://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
CELERY_IMPORTS = (
'your_app.tasks',
)
CELERY_DEFAULT_QUEUE = 'default'
4. Implémentez des tâches asynchrones dans Django
Créez un fichier tâches.py dans certaines applications du projet Django pour stocker les fonctions des tâches asynchrones. Par exemple, nous créons une application de messagerie, puis écrivons une tâche asynchrone pour envoyer des e-mails dans emails/tasks.py.
from céleri import task
from django.core.mail import send_mail
@task()
def send_email_task(sujet, message, from_email, destinataire_list):
send_mail(subject, message, from_email, recipient_list)
Il convient de noter qu'ici Le décorateur de tâches est fourni par Celery et est utilisé pour enregistrer une fonction en tant que tâche Celery.
5. Démarrez Celery Worker
Ouvrez le terminal, passez au répertoire racine du projet Django et exécutez la commande suivante pour démarrer Celery Worker.
$ céleri -A project_name worker -l info
Où, project_name est le nom du projet Django.
6. Écrivez un module de test
Écrivez une fonction d'affichage qui envoie des e-mails dans vues.py d'une application du projet Django et liez la fonction d'affichage à une certaine URL.
from django.shortcuts import render
from .tasks import send_email_task
def send_email_view(request):
if request.method == 'POST': subject = request.POST.get('subject') message = request.POST.get('message') from_email = request.POST.get('from_email') recipient_list = [request.POST.get('recipient_email')] # 调用异步任务 send_email_task.delay(subject, message, from_email, recipient_list) return render(request, 'success.html') return render(request, 'send_email.html')
7 Exécutez les tests et le résumé
Démarrez le projet Django, puis accédez à la vue send_email_view correspondant à. Adresse URL, remplissez les informations pertinentes et cliquez sur le bouton Envoyer un e-mail.
Vous pouvez observer que l'e-mail sera envoyé de manière asynchrone en arrière-plan et que l'interface répondra immédiatement avec un message d'invite, de sorte que l'utilisateur n'a pas besoin d'attendre que l'e-mail soit envoyé. Il s'agit du processus de traitement de tâches asynchrone implémenté à l'aide de Celery Redis Django.
Résumé :
Utilisation de Celery Redis Django peut facilement implémenter un traitement de tâches asynchrone sur le site Web. En effectuant des opérations fastidieuses dans les tâches asynchrones de Celery, vous pouvez améliorer efficacement les performances et l'expérience utilisateur de votre site Web. Dans le processus d'utilisation spécifique, nous devons installer et configurer Celery et définir le module de tâches, puis appeler la fonction de tâche asynchrone dans Django pour réaliser un traitement asynchrone. Différentes tâches peuvent être traitées simultanément par différents travailleurs, améliorant ainsi les capacités de traitement simultané de l'ensemble du système.
Exemple de code spécifique :
BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379 / 0'
CELERY_IMPORTS = (
'your_app.tasks',
)
CELERY_DEFAULT_QUEUE = 'default'
from céleri import task
from django.core.mail importer send_mail
@task()
def send_email_task(sujet, message, from_email, destinataire_list):
send_mail(subject, message, from_email, recipient_list)
from django.shortcuts import render
from .tasks import send_email_task
def send_email_view(request):
if request.method == 'POST': subject = request.POST.get('subject') message = request.POST.get('message') from_email = request.POST.get('from_email') recipient_list = [request.POST.get('recipient_email')] # 调用异步任务 send_email_task.delay(subject, message, from_email, recipient_list) return render(request, 'success.html') return render(request, 'send_email.html')
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!