Programmation Python Server : Task Queuing avec Django-celery
Avec la popularité croissante des applications Web et l'augmentation du nombre d'utilisateurs, les applications Web modernes doivent maintenir la productivité et la stabilité en gérant des tâches complexes et urgentes. Du traitement des commandes sur les sites Web de commerce électronique et du traitement des fichiers journaux du système aux applications avancées de vision par ordinateur et de traitement du langage naturel, ces tâches nécessitent des processus indépendants.
L'approche conventionnelle consiste à utiliser cron ou un planificateur de tâches similaire, mais il existe les problèmes suivants :
Donc, afin de résoudre ces problèmes, nous avons besoin d'un service de file d'attente des tâches.
Dans l'écosystème Python, Celery est la file d'attente de tâches la plus couramment utilisée. Il s'agit d'une file d'attente de tâches conçue pour les systèmes distribués et adaptée aux applications Web à haute concurrence et à haut débit.
Dans cet article, nous présenterons comment développer un service de file d'attente de tâches à l'aide de Celery et Django. Nous utiliserons Django-Celery comme intégration Django pour Celery.
Tout d'abord, nous devons installer les dépendances de Celery et Django-Celery dans le projet. Vous pouvez utiliser l'outil pip pour les installer.
pip install céleri django-celery
Avant de commencer à utiliser Celery, nous devons configurer Celery. Pour ce faire, créez un fichier appelé celery.py, qui doit se trouver dans le répertoire racine de votre projet. Le contenu du fichier est le suivant :
from __future__ import absolute_import, unicode_literals import os from celery import Celery # Set the default Django settings module for the 'celery' program. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'example.settings') app = Celery('example') # Using a string here means the worker will not have to # pickle the object when using Windows. app.config_from_object('django.conf:settings', namespace='CELERY') # Load task modules from all registered Django app configs. app.autodiscover_tasks()
Remarque : Si vous souhaitez configurer Celery en utilisant la configuration spécifiée dans le fichier settings.py, veuillez remplacer 'example.settings' par le nom réel de votre projet Django.
Maintenant, nous devons configurer Django dans le fichier settings.py pour qu'il prenne en charge Celery.
# Celery Configuration CELERY_BROKER_URL = 'redis://localhost:6379/0' CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' CELERY_ACCEPT_CONTENT = ['application/json'] CELERY_TASK_SERIALIZER = 'json' CELERY_RESULT_SERIALIZER = 'json' # app注册 INSTALLED_APPS = ( ... 'django_celery_results', 'django_celery_beat', ... )
Ici, nous configurons deux paramètres clés. (1) CELERY_BROKER_URL – Cela indique à Celery d'utiliser Redis comme service middleware. (2) INSTALLED_APPS – Nous devons enregistrer deux applications de Django-Celery dans notre application.
Maintenant que Celery et Django sont configurés, nous pouvons commencer à définir certaines tâches. Nous allons créer un exemple de tâche pour démontrer la structure et la syntaxe de la tâche. Dans le fichier app/tasks.py, ajoutez le contenu suivant.
from django.core.mail import send_mail from celery import shared_task from datetime import datetime @shared_task def send_email_task(): subject = 'Celery Email Demo' message = 'This email is sent using celery!' from_email = 'demo@example.com' recipient_list = ['recipient@example.com'] send_mail(subject, message, from_email, recipient_list) print('Email Sent Successfully') return None @shared_task def print_time(): now = datetime.now() current_time = now.strftime("%H:%M:%S") print("Current Time =", current_time) return None
Ici, nous définissons deux tâches. Il s'agit respectivement des tâches send_email_task et print_time. Faites attention à cela, nous décorons la tâche avec le décorateur shared_task. Cela rend nos tâches accessibles de n'importe où, leur permettant d'être appelées par plusieurs processus.
Maintenant que nous avons défini les tâches, nous devons démarrer les processus de travail et leur indiquer les tâches à effectuer.
Ouvrez une fenêtre de terminal et entrez la commande suivante :
$ celery -A example worker --loglevel=info
Notez que cet exemple représente le nom du projet Django. Ici, nous utilisons --loglevel=info pour contrôler le niveau de journalisation du travailleur.
Django-Celery prend en charge la gestion et la planification des tâches dans l'interface d'administration de Django. Nous devons enregistrer deux applications auprès de Django-Celery. Nous pouvons ajouter le code suivant dans le fichier admin.py.
from django.contrib import admin from django_celery_beat.admin import PeriodicTaskAdmin, IntervalScheduleAdmin from django_celery_results.models import TaskResult from django_celery_results.admin import TaskResultAdmin from core.tasks import send_email_task, print_time class Tasks(admin.ModelAdmin): actions = ['send_email_task', 'print_time'] def send_email_task(self, request, queryset): send_email_task.delay() send_email_task.short_description = "Send Email Task" def print_time(self, request, queryset): print_time.delay() print_time.short_description = "Print Current Time" admin.site.unregister(TaskResult) admin.site.register(TaskResult, TaskResultAdmin) admin.site.register(IntervalSchedule, IntervalScheduleAdmin) admin.site.register(PeriodicTask, PeriodicTaskAdmin) admin.site.register(Tasks)
Ici, nous ajoutons nos tâches à l'interface d'administration. Nous pouvons effectuer ces tâches en cliquant sur les boutons « Effectuer une tâche de courrier » et « Imprimer l'heure actuelle ».
Maintenant, nous avons mis en place avec succès un service de file d'attente de tâches en utilisant Django-Celery. Nous pouvons l'utiliser pour différentes applications et le distribuer sur plusieurs serveurs en utilisant des protocoles de communication tels que les protocoles WebSocket et HTTP.
Conclusion
Cet article présente comment développer un service de file d'attente de tâches à l'aide de Celery et Django. Nous utilisons Django-Celery comme intégration Django pour Celery et montrons comment définir des tâches, configurer Celery, démarrer des travailleurs, planifier des tâches et gérer des tâches. Les services de file d'attente de tâches constituent un excellent moyen de gérer des tâches complexes et chronophages et permettent d'améliorer les performances et la fiabilité des applications Web.
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!