Maison  >  Article  >  développement back-end  >  Celery, Redis et Django sont utilisés ensemble pour améliorer l'efficacité du traitement des tâches asynchrones

Celery, Redis et Django sont utilisés ensemble pour améliorer l'efficacité du traitement des tâches asynchrones

PHPz
PHPzoriginal
2023-09-28 18:27:24927parcourir

Celery, Redis et Django sont utilisés ensemble pour améliorer lefficacité du traitement des tâches asynchrones

Celery, Redis et Django sont utilisés ensemble pour améliorer l'efficacité du traitement des tâches asynchrones

Introduction : Dans le processus de développement d'applications Web, nous rencontrons souvent des tâches fastidieuses qui doivent être traitées. Si ces tâches sont exécutées directement dans le processus de traitement des demandes, l'utilisateur devra attendre trop longtemps, ce qui sera extrêmement défavorable à l'expérience utilisateur. Afin de résoudre ce problème, nous pouvons utiliser Celery, Redis et Django pour traiter des tâches chronophages de manière asynchrone, améliorant ainsi les performances du système et l'expérience utilisateur.

  1. Introduction et installation de Celery
    Celery est une file d'attente de tâches qui fonctionne sur la base d'une messagerie distribuée et prend également en charge la planification des tâches. L'installation de Celery peut être effectuée via la commande pip :

    pip install celery
  2. Introduction et installation de Redis
    Redis est une base de données open source en mémoire qui prend en charge une variété de structures de données et un large éventail de scénarios d'application. Dans notre scénario, Redis est principalement utilisé comme implémentation de stockage backend de la file d'attente des tâches. L'installation de Redis peut être complétée par les étapes suivantes :
  3. Téléchargez Redis et décompressez-le
  4. Entrez dans le répertoire décompressé et utilisez la commande make pour compiler
  5. Utilisez la commande make install pour installer
  6. Configuration de Django
    Tout d'abord, vous devez définissez les paramètres du projet Django Ajoutez les éléments de configuration Celery au fichier .py, comme indiqué ci-dessous :

    # settings.py
    
    # Celery配置
    CELERY_BROKER_URL = 'redis://localhost:6379/0'
    CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
    CELERY_ACCEPT_CONTENT = ['json']
    CELERY_TASK_SERIALIZER = 'json'
    CELERY_RESULT_SERIALIZER = 'json'

    Dans la configuration ci-dessus, CELERY_BROKER_URL et CELERY_RESULT_BACKEND spécifiez l'adresse et port de Redis, qui sont utilisés comme tâches Backend pour les files d'attente et le stockage des résultats. CELERY_BROKER_URLCELERY_RESULT_BACKEND指定了Redis的地址和端口,用来作为任务队列和结果存储的后端。

接下来,在项目的urls.py文件中添加Celery的配置,如下所示:

# urls.py

from django.urls import path
from .views import AsyncTaskView

urlpatterns = [
    path('async-task/', AsyncTaskView.as_view(), name='async_task'),
]
  1. 创建任务函数
    在Django的app中创建tasks.py文件,并在其中定义异步任务的函数。下面是一个示例代码:

    # app/tasks.py
    
    from celery import shared_task
    import time
    
    @shared_task
    def process_task():
     # 模拟任务处理过程(等待5秒)
     time.sleep(5)
     return 'Task completed'

    在上述代码中,@shared_task装饰器用于将函数转换为Celery的任务函数。

  2. 视图实现
    在Django的views.py文件中定义一个视图类,用于接收请求并调用异步任务函数。下面是一个示例代码:

    # app/views.py
    
    from django.views import View
    from .tasks import process_task
    from django.http import HttpResponse
    
    class AsyncTaskView(View):
     def get(self, request):
         # 调用异步任务
         task = process_task.delay()
         return HttpResponse('Task started')
  3. 启动Celery服务
    使用以下命令来启动Celery的工作进程:

    celery -A your_project_name worker --loglevel=info

    注意将your_project_name替换为你的Django项目名称。

  4. 测试
    在浏览器中访问http://localhost:8000/async-task/

Ensuite, ajoutez la configuration de Celery dans le fichier urls.py du projet comme suit :

rrreee
    🎜🎜Créez la fonction de tâche🎜Créez le fichier tâches.py dans l'application Django et définissez la fonction fonction de la tâche asynchrone qu'il contient. Voici un exemple de code : 🎜rrreee🎜Dans le code ci-dessus, le décorateur @shared_task est utilisé pour convertir la fonction en fonction de tâche Celery. 🎜🎜🎜🎜Implémentation de vue🎜Définissez une classe de vue dans le fichier vues.py de Django pour recevoir des requêtes et appeler des fonctions de tâches asynchrones. Voici un exemple de code : 🎜rrreee🎜🎜🎜Démarrez le service Celery 🎜Utilisez la commande suivante pour démarrer le processus de travail Celery : 🎜rrreee🎜Remplacez votre_nom_projet par le nom de votre projet Django. 🎜🎜🎜Test🎜Visitez http://localhost:8000/async-task/ dans le navigateur Si tout se passe bien, vous verrez que le résultat renvoyé est « Tâche démarrée ». À l'heure actuelle, la tâche a été traitée de manière asynchrone en arrière-plan et ne bloquera pas le traitement des demandes de l'utilisateur. 🎜🎜🎜Conclusion : en utilisant la combinaison de Celery, Redis et Django, nous pouvons traiter des tâches chronophages de manière asynchrone, améliorant ainsi les performances du système et l'expérience utilisateur. Celery facilite la gestion des files d'attente et de la planification des tâches, tandis que Redis, en tant que stockage principal, permet un stockage fiable des données de tâches. Cette solution peut être largement utilisée dans le développement d'applications Web et son processus de mise en œuvre est démontré à travers des exemples de code spécifiques. 🎜

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