Maison >développement back-end >Tutoriel Python >Meilleures pratiques pour le traitement des tâches asynchrones basé sur Celery Redis Django

Meilleures pratiques pour le traitement des tâches asynchrones basé sur Celery Redis Django

WBOY
WBOYoriginal
2023-09-26 17:01:222489parcourir

基于Celery Redis Django的异步任务处理最佳实践

Bonnes pratiques pour le traitement des tâches asynchrones basé sur Celery Redis Django

Introduction :
Dans le développement Web, vous rencontrerez parfois des tâches fastidieuses à effectuer, telles que l'envoi d'e-mails, la génération de rapports, etc. Si vous effectuez ces tâches directement dans la requête Web, cela dégradera l'expérience utilisateur et provoquera même un crash du système. Pour résoudre ce problème, vous pouvez utiliser une combinaison de Celery, Redis et Django pour implémenter le traitement des tâches asynchrones. Cet article expliquera comment utiliser la combinaison de Celery Redis et Django pour obtenir un traitement de tâches asynchrone optimal.

  1. Configuration de l'environnement
    Tout d'abord, vous devez installer et configurer les dépendances et les composants requis.

1.1. Installer Celery : utilisez pip pour installer Celery.

pip install celery

1.2. Configurer Redis : vous devez installer et configurer Redis comme middleware de message.

1.3. Configurez Django : assurez-vous d'utiliser Celery dans votre projet Django.

  1. Créer des tâches de céleri
    En utilisant Celery, les tâches peuvent être divisées en plusieurs petits morceaux, puis envoyées une par une via la file d'attente des messages.

2.1. Créer une instance Celery : Créez un fichier celery.py dans le répertoire racine du projet Django pour configurer et créer une instance Celery. celery.py文件,用于配置和创建Celery实例。

from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings')
app = Celery('your_project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

2.2. 创建异步任务:在Django项目的某个应用中创建一个tasks.py文件,用于定义异步任务。

from celery import shared_task

@shared_task
def send_email(to, subject, message):
    # 实现发送邮件的代码
  1. 使用Celery调度任务
    在Django的视图函数中,可以通过调用Celery的delay()方法来异步执行任务。

3.1. 导入任务:

from myapp.tasks import send_email

3.2. 调度任务:

send_email.delay('example@example.com', 'Hello', 'Welcome to our website!')
  1. 监控任务执行
    Celery提供了一些监控工具,可以查看任务的执行情况。

4.1. 启动Worker:在终端窗口中,使用以下命令启动Celery Worker。

celery -A your_project worker -l info

4.2. 启动Beat:如果需要定时调度任务,可以使用以下命令启动Celery Beat。

celery -A your_project beat -l info

4.3. 监控任务:可以使用Flower来监控任务的执行情况。

4.4. 配置Result Backend:在celery.py

app.conf.update(
    CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend',
)

2.2. Créer des tâches asynchrones : Créez un fichier tasks.py dans une application du projet Django pour définir des tâches asynchrones.
    rrreee
    1. Utilisez Celery pour planifier des tâches
      Dans la fonction d'affichage de Django, vous pouvez exécuter des tâches de manière asynchrone en appelant la méthode delay() de Celery.

    3.1. Importer des tâches :

    rrreee🎜3.2. Planifier des tâches : 🎜rrreee
      🎜Surveiller l'exécution des tâches🎜Celery fournit des outils de surveillance pour visualiser l'exécution des tâches. 🎜🎜🎜4.1. Démarrer Worker : Dans la fenêtre du terminal, utilisez la commande suivante pour démarrer Celery Worker. 🎜rrreee🎜4.2. Démarrer Beat : Si vous devez planifier des tâches régulièrement, vous pouvez utiliser la commande suivante pour démarrer Celery Beat. 🎜rrreee🎜4.3. Surveiller les tâches : Vous pouvez utiliser Flower pour surveiller l'exécution des tâches. 🎜🎜4.4. Configurer le backend des résultats : ajoutez le code suivant dans le fichier celery.py pour configurer la méthode de retour des résultats de la tâche. 🎜rrreee🎜🎜Conclusion🎜En utilisant la combinaison Celery Redis Django, nous pouvons obtenir un traitement asynchrone efficace des tâches. L'utilisation de Celery comme planificateur de tâches et de Redis comme middleware de messages peut améliorer les performances et la stabilité du système. Parallèlement, grâce à des outils de surveillance, nous pouvons visualiser l’exécution des tâches en temps réel pour faciliter le dépannage et la résolution des problèmes. Il convient de noter que lorsque vous utilisez Celery, vous devez prêter attention à la conception et à la qualité du code des tâches pour éviter les problèmes potentiels et les goulots d'étranglement des performances. 🎜🎜🎜Ce qui précède est une introduction et un exemple de code sur les meilleures pratiques de traitement de tâches asynchrones basé sur Celery Redis Django. J'espère que cela sera utile à tout le monde dans la gestion des tâches asynchrones dans le développement 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!

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