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
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.
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
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_URL
和CELERY_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'), ]
创建任务函数
在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的任务函数。
视图实现
在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')
启动Celery服务
使用以下命令来启动Celery的工作进程:
celery -A your_project_name worker --loglevel=info
注意将your_project_name
替换为你的Django项目名称。
http://localhost:8000/async-task/
Ensuite, ajoutez la configuration de Celery dans le fichier urls.py du projet comme suit :
rrreee@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!