Comment implémenter le traitement des tâches asynchrones à l'aide de Celery, Redis et Django

WBOY
Libérer: 2023-09-27 10:15:36
original
1013 Les gens l'ont consulté

Comment implémenter le traitement des tâches asynchrones à laide de Celery, Redis et Django

Comment utiliser Celery, Redis et Django pour implémenter le traitement asynchrone des tâches

Introduction :
Lors du développement d'applications Web, nous rencontrons souvent des tâches qui prennent beaucoup de temps à réaliser, comme l'envoi d'e-mails, la génération de fichiers PDF, etc. . Si ces tâches sont exécutées dans le thread principal, l'utilisateur devra attendre que l'exécution de la tâche soit terminée avant de recevoir une réponse, ce qui affectera l'expérience utilisateur. Afin d'améliorer les performances, nous pouvons utiliser le traitement des tâches asynchrones pour exécuter ces tâches chronophages en arrière-plan afin que les utilisateurs puissent obtenir des réponses rapidement. Cet article expliquera comment utiliser Celery, Redis et Django pour implémenter le traitement des tâches asynchrones et donnera des exemples de code détaillés.

1. Que sont Celery, Redis et Django

  1. Celery est une bibliothèque de traitement de tâches asynchrone basée sur la transmission de messages distribués. Elle peut diviser les tâches en plusieurs sous-tâches et les distribuer à différents nœuds de travail pour une exécution simultanée. Celery prend en charge plusieurs méthodes de transmission de messages, telles que RabbitMQ, Redis, etc.
  2. Redis est une base de données de stockage de paires clé-valeur hautes performances qui peut être utilisée pour stocker les résultats intermédiaires et les informations d'état des tâches Celery.
  3. Django est un framework Web Python avancé pour développer des applications Web.

2. Installez et configurez Celery, Redis et Django

  1. Installez Celery et Redis :

    pip install celery
    pip install redis
    Copier après la connexion
  2. Configurez Celery :
    Ajoutez la configuration suivante dans le fichier settings.py du projet Django :

    # Celery配置
    CELERY_BROKER_URL = 'redis://localhost:6379/0'
    CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
    CELERY_ACCEPT_CONTENT = ['json']
    CELERY_RESULT_SERIALIZER = 'json'
    CELERY_TASK_SERIALIZER = 'json'
    CELERY_TIMEZONE = 'Asia/Shanghai'
    Copier après la connexion

    Assume Redis ici S'exécute localement sur le port 6379.

  3. Créer une application Django et une tâche asynchrone :
    Créez une application dans le projet Django et définissez une tâche asynchrone.

    # 创建Django应用
    python manage.py startapp myapp
    
    # 在myapp/tasks.py中定义异步任务
    from celery import shared_task
    
    @shared_task
    def send_email_task(email):
     # 发送邮件的逻辑
    Copier après la connexion

    4. Écrire des vues Django et tester des tâches asynchrones

  4. Écrire des vues Django :
    Écrivez une fonction de vue dans le fichier vues.py de l'application Django pour recevoir les demandes des utilisateurs et appeler des tâches asynchrones.

    from django.shortcuts import render
    from myapp.tasks import send_email_task
    
    def send_email(request):
     # 获取用户请求参数
     email = request.GET.get('email')
     # 调用异步任务
     send_email_task.delay(email)
     return render(request, 'send_email.html')
    Copier après la connexion
  5. Créez un modèle Django :
    Créez un fichier modèle send_email.html dans le répertoire templates de l'application Django pour afficher les résultats de l'envoi d'emails.
  6. Démarrez le travailleur Celery :
    Exécutez la commande suivante dans la ligne de commande pour démarrer le travailleur Celery :

    celery -A your_django_project_name worker --loglevel=info
    Copier après la connexion
  7. Testez la tâche asynchrone :
    Démarrez le serveur de développement Django, accédez à l'URL pour envoyer l'e-mail et transmettez les paramètres de messagerie. Celery placera la tâche dans la file d'attente des messages et l'exécutera en arrière-plan.

    http://localhost:8000/send_email?email=test@example.com
    Copier après la connexion

Résumé :
Le traitement des tâches asynchrones peut être facilement implémenté à l'aide de Celery, Redis et Django. En exécutant des tâches fastidieuses en arrière-plan, les performances et l'expérience utilisateur des applications Web peuvent être considérablement améliorées. Dans le développement réel, les tâches peuvent également être optimisées et étendues en fonction de besoins spécifiques, tels que la définition de la priorité et du délai d'expiration des tâches, la gestion des échecs d'exécution des tâches, etc. J'espère que cet article pourra vous aider à comprendre et à utiliser Celery, Redis et Django pour implémenter le traitement des tâches asynchrones.

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