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

王林
Libérer: 2023-09-26 19:37:10
original
2084 Les gens l'ont consulté

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

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

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):
    """
    发送邮件的异步任务
    """
    # 发送邮件的代码
    ...
Copier après la connexion

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

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

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

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

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!

É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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!