Maison  >  Article  >  développement back-end  >  Construire un système de traitement de tâches asynchrone : une plongée approfondie dans Celery Redis Django

Construire un système de traitement de tâches asynchrone : une plongée approfondie dans Celery Redis Django

PHPz
PHPzoriginal
2023-09-26 13:46:441550parcourir

构建异步任务处理系统:深入探索Celery Redis Django

Création d'un système de traitement de tâches asynchrones : une exploration approfondie de Celery Redis Django

Introduction :
Dans le développement d'applications Web modernes, le système de traitement de tâches asynchrones est devenu un composant indispensable. Il peut considérablement améliorer les performances et l'évolutivité des applications, tout en séparant les tâches fastidieuses des demandes des utilisateurs et en améliorant l'expérience utilisateur. Cet article explorera en profondeur un puissant framework de traitement de tâches asynchrones : Celery et deux technologies back-end importantes : Redis et Django, et fournira des exemples de code spécifiques.

1. Introduction à Celery
Celery est un framework de file d'attente de tâches distribuées basé sur Python. Il prend en charge de nombreux middlewares de messages, tels que RabbitMQ, Redis et Amazon SQS. Ses principales fonctionnalités incluent :

  1. Évolutivité : Celery peut gérer des tâches simultanées à grande échelle et peut réaliser une expansion horizontale du système en ajoutant des nœuds de travail.
  2. Traitement asynchrone : Celery permet de soumettre des tâches à la file d'attente de manière asynchrone sans attendre la fin de la tâche, évitant ainsi le blocage des requêtes.
  3. Équilibrage de charge : Celery prend en charge l'équilibrage automatique de la charge des tâches et peut allouer intelligemment les tâches en fonction de la charge du travailleur.

2. Introduction à Redis
Redis est un système de stockage de données en mémoire open source. Il est largement utilisé dans des scénarios tels que la mise en cache, les files d'attente de messages et les files d'attente de tâches. Redis prend en charge des structures et des opérations de données riches et présente les caractéristiques de hautes performances, de haute disponibilité et de persistance.

Dans Celery, Redis est généralement utilisé comme backend de la file d'attente des tâches, qui peut conserver les messages de tâches et fournir des opérations de lecture et d'écriture à grande vitesse. Voici un exemple de code pour utiliser Redis comme backend de file d'attente de tâches Celery :

# settings.py
BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

# celery.py
from celery import Celery
app = Celery('myapp', broker='redis://localhost:6379/0')

@app.task
def add(x, y):
    return x + y

Ce code configure d'abord l'URL de Redis dans settings.py en tant que backend de file d'attente de tâches Celery et backend de stockage des résultats. Ensuite, dans celery.py, une instance de Celery est créée et un simple ajout de tâche est défini.

3. Intégration de Django et Celery
L'utilisation de Celery dans Django peut implémenter de manière asynchrone des tâches chronophages tout en conservant la vitesse de réponse des interfaces fournies par les applications Django. Voici un exemple de code pour intégrer Django à Celery :

# settings.py
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

CELERY_BEAT_SCHEDULE = {
    'send-email-every-hour': {
        'task': 'myapp.tasks.send_email',
        'schedule': crontab(minute=0, hour='*/1'),
    },
}

# myapp/tasks.py
from .celery import app

@app.task
def send_email():
    # 发送邮件的任务代码

Tout d'abord, dans settings.py, l'URL de Celery est configurée comme backend de file d'attente des tâches et backend de stockage des résultats, et la configuration de la tâche planifiée est définie. Ensuite, dans myapp/tasks.py, une tâche nommée send_email est définie pour l'envoi d'e-mails.

Pour utiliser Celery dans Django, vous devez également créer un fichier celery.py séparé pour initialiser l'instance de Celery et vous assurer qu'elle est chargée au démarrage de l'application Django. Le code spécifique est le suivant :

# celery.py
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')

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

Ce code est le premier. configuré via le module os Le module de paramètres de Django définit l'instance de Celery utilisée et découvre automatiquement le module de tâches de Django via app.autodiscover_tasks().

Conclusion :
Cet article présente brièvement Celery, Redis et Django, trois composants importants pour la construction d'un système de traitement de tâches asynchrone, et fournit des exemples de code spécifiques. En utilisant la combinaison de Celery, Redis et Django, vous pouvez créer un système de traitement de tâches asynchrone hautes performances et évolutif pour améliorer les performances et l'expérience utilisateur des applications Web. J'espère que les lecteurs auront une compréhension et une maîtrise plus approfondies de la création d'un système de traitement de tâches asynchrone grâce à l'introduction de cet article.

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