Maison  >  Article  >  développement back-end  >  Combat pratique : utiliser Celery, Redis et Django pour implémenter des tâches asynchrones simultanées

Combat pratique : utiliser Celery, Redis et Django pour implémenter des tâches asynchrones simultanées

王林
王林original
2023-09-26 19:37:102123parcourir

Combat pratique : utiliser Celery, Redis et Django pour implémenter des tâches asynchrones simultanées

Pratique : Utiliser Celery, Redis et Django pour implémenter des tâches asynchrones simultanées

Introduction :
Dans le développement d'applications web modernes, pour certaines tâches de longue durée (telles que le traitement de données, l'envoi d'emails, etc.), afin de améliorer les utilisateurs Pour améliorer l'expérience et les performances du système, des tâches asynchrones sont souvent utilisées pour gérer ces tâches. Dans cet article, nous présenterons comment utiliser Celery, Redis et Django pour créer une solution de tâches asynchrones simultanées et donnerons des exemples de code spécifiques.

1. Introduction à Celery, Redis et Django :

  1. Celery :
    Celery est un middleware de file d'attente de tâches/messages asynchrone largement utilisé dans les applications Python. Il fournit un moyen simple de séparer les tâches fastidieuses de l'application principale pour améliorer les performances du système.
  2. Redis :
    Redis est un système de stockage de structure de données en mémoire hautes performances qui peut être utilisé comme courtier de messages pour Celery. Celery utilise Redis pour stocker les messages de tâches afin de réaliser une exécution asynchrone des tâches.
  3. Django :
    Django est un framework de développement d'applications Web basé sur Python qui fournit une multitude de fonctions et de plug-ins. Nous pouvons exploiter les structures et les modèles de Django pour organiser et gérer des tâches asynchrones et intégrer Celery et Redis.

2. Configurer l'environnement :
Avant de commencer, assurez-vous que Python, Django, Celery et Redis ont été installés. Vous pouvez utiliser la commande pip pour installer, l'exemple est le suivant :

pip install django
pip install celery
pip install redis

3. Configurez Celery et Redis :
Ajoutez la configuration suivante au fichier de configuration settings.py du projet Django :

# Celery配置
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

# Redis配置
CACHES = {
    'default': {
        'BACKEND': 'redis_cache.RedisCache',
        'LOCATION': '127.0.0.1:6379',
        'OPTIONS': {
            'DB': 0,
            'PASSWORD': '',
            'PARSER_CLASS': 'redis.connection.HiredisParser'
        },
    }
}

4. Créez un fichier de configuration asynchrone tâche :
Quelque part dans Django Créez le fichier tâches.py dans le répertoire de l'application et écrivez le code suivant :

from celery import shared_task

@shared_task
def send_email(email):
    """
    发送邮件的异步任务
    """
    # 发送邮件的代码
    ...

5. Appelez des tâches asynchrones :
Dans la fonction view de Django, appelez des tâches asynchrones via la méthode delay() L'exemple est. comme suit :

from .tasks import send_email

def send_email_view(request):
    # 获取需要发送邮件的用户邮箱
    email = request.GET.get('email')
    
    # 调用异步任务
    send_email.delay(email)
    
    # 返回响应
    return JsonResponse({'status': 'success'})

6. Démarrez Celery Worker et Beat :
Dans le fichier celery.py dans le répertoire racine du projet, écrivez le code suivant :

from __future__ import absolute_import
import os
from celery import Celery

# 设置Django环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')

app = Celery('project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

Ensuite, exécutez la commande suivante dans le répertoire racine du projet pour démarrer Celery Worker. et Beat :

celery -A project worker --loglevel=info
celery -A project beat --loglevel=info

7. Testez les tâches asynchrones :
Écrivez une fonction de vue de test Django et testez-la en appelant des tâches asynchrones L'exemple est le suivant :

from .tasks import send_email

def test_view(request):
    # 调用异步任务
    send_email.delay('test@example.com')
    
    # 返回响应
    return JsonResponse({'status': 'success'})

Résumé :
Cet article présente comment utiliser Celery, Redis. et Django pour implémenter des tâches asynchrones simultanées. En configurant Celery et Redis, les tâches de longue durée peuvent être exécutées de manière asynchrone pour améliorer les performances du système et l'expérience utilisateur. Dans le même temps, des exemples de codes spécifiques sont donnés à titre de référence et de pratique pour les lecteurs. En apprenant et en pratiquant cette solution, je pense que les lecteurs peuvent raisonnablement appliquer des tâches asynchrones simultanées dans leurs propres projets.

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!

Déclaration:
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