Utilisez Celery Redis Django pour optimiser le processus de traitement des tâches asynchrones du site Web

WBOY
Libérer: 2023-09-27 08:38:01
original
821 Les gens l'ont consulté

使用Celery Redis Django优化网站异步任务处理流程

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 :

Redis en tant que courtier de messages

BROKER_URL. = 'redis ://localhost:6379/0'

Stocker les résultats des tâches localement

CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

Définir le module de tâche

CELERY_IMPORTS = (

'your_app.tasks',
Copier après la connexion
Copier après la connexion

)

Définir Nom de la file d'attente des tâches par défaut

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.

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)
Copier après la connexion
Copier après la connexion

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.

views.py

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')
Copier après la connexion

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 :

settings.py

Redis en tant que courtier de messages

BROKER_URL = 'redis://localhost:6379/0'

Stocker les résultats des tâches localement

CELERY_RESULT_BACKEND = 'redis://localhost:6379 / 0'

Définir le module de tâches

CELERY_IMPORTS = (

'your_app.tasks',
Copier après la connexion
Copier après la connexion

)

Définir le nom de la file d'attente des tâches par défaut

CELERY_DEFAULT_QUEUE = 'default'

tasks.py

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)
Copier après la connexion
Copier après la connexion

views.py

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')
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal