Au cours de mes 6 années d’expérience en codage, Django est sans aucun doute le meilleur framework avec lequel j’ai jamais travaillé. Parfois, nous allons créer une application Django simple pour exécuter des tâches asynchrones en arrière-plan en utilisant Celery et RabbitMQ.
Python 3.6.8, RabbitMQ 3.6.10
Django==2.2.3, flower==0.9.3, celery==4.3.0
installer RabbitMQ :
apt-get install rabbitmq-server
Le service RabbitMQ démarre automatiquement lors de l’installation. Vous pouvez démarrer manuellement le serveur en exécutant la commande suivante sur la ligne de commande.
rabbitmq-server
Après l’installation de RabbitMQ, vous devez installer python et le package associé avec la commande pip comme:
pip install Django
pip install celery
Ensuite, vous devez créer un projet Django avec une application simple, nous créons un projet djangocelery avec app l, vous pouvez cloner le projet djangocelery sur mon GitHub.
Projet Djangocelery
djangocelery/|-- app/| |-- migrations/| |-- __init__.py| |-- admin.py| |-- apps.py| |-- models.py| |-- tests.py| +-- views.py|-- djangocelery/| |-- __init__.py| |-- settings.py| |-- urls.py| +-- wsgi.py|-- manage.py+-- requirements.txt
La première étape, vous devez ajouter la configuration CELERY_BROKER_URL à la settings.py fichier:
paramètres.py
CELERY_BROKER_URL = ‘amqp://localhost’
Ajoutez du Céleri à votre projet Django
Créez un fichier nommé celery.py adjacent à votre `settings.py ‘ fichier,
|-- djangocelery/| |-- __init__.py| |-- celery.py| |-- settings.py| |-- urls.py| +-- wsgi.py
Ce fichier contiendra la configuration de céleri pour notre projet, Ajoutez le code suivant au `celery.py ‘file:
Le code ci-dessus crée une instance de notre projet, La dernière ligne indique à celery de découvrir automatiquement toutes les tâches asynchrones pour toutes les applications répertoriées sous `INSTALLED_APPS`.
Celery recherchera des définitions de tâches asynchrones dans un fichier nommé `tasks.py ‘ fichier dans chacun des répertoires de l’application.
Modifier le __init__.py
maintenant modifier __init__.py fichier dans la racine du projet avec ce chemin:
|-- djangocelery/| |-- __init__.py
ouvrez-le et copiez le code ci-dessous dans le fichier et enregistrez-le.
Cela garantira que notre application Céleri est importante à chaque démarrage de Django.
Création de la première tâche de Céleri
Nous pouvons créer un fichier nommé tâches.py dans une application Django et placez toutes nos tâches Céleri dans ce fichier, L’application Céleri que nous avons créée à la racine du projet collectera toutes les tâches définies dans toutes les applications Django répertoriées dans la configuration Installed_apps.
app/tasks.py
app/views.py
Au lieu d’appeler directement celery_task, j’appelle celery_task.delay(), de cette façon, nous demandons à Celery d’exécuter cette fonction en arrière-plan, puis Django continue de traiter ma vue celery_view et retourne en douceur à l’utilisateur
djangocelery/urls.py
Mais avant de l’essayer, vérifiez la section suivante pour savoir comment démarrer le processus de travail de Céleri.
Démarrage du processus de travail
Ouvrez un nouvel onglet de terminal sur le chemin du projet et exécutez la commande suivante :
celery -A djangocelery worker -l info
Le résultat est quelque chose comme ceci:
puis exécutez le projet Django ouvrez le http://127.0.0.1:8000/celerytask/ puis après quelques secondes, Si nous vérifions à nouveau le processus de travail du Céleri, nous pouvons le voir terminé l’exécution, charger d’abord la page terminée et envoyer des tâches au céleri puis le céleri a reçu des tâches:
After 30seconds tasks functions done and return successful strings :
Surveillance des travailleurs du céleri
Il existe un outil Web pratique appelé Flower qui peut être utilisé pour surveiller et administrer les grappes de Céleri, Flower fournit des statistiques détaillées de la progression et de l’historique des tâches, Il montre également d’autres détails de la tâche tels que les arguments passés, l’heure de début, l’exécution, etc.
installer Flower
pip install flower
Une fois installé, vous devez ouvrir une nouvelle ligne de commande dans le répertoire du projet et exécuter cette commande :
celery -A djangocelery worker -l info
puis ouvrir une nouvelle ligne de commande dans le chemin du projet et exécuter cette commande :
celery -A djangocelery flower
Les détails peuvent ensuite être consultés en visitant http://localhost:5555/dashboard dans votre navigateur comme :
De plus:
Vous pouvez supprimer toutes les tâches en attente avec:
celery -A proj purge
C’est tout. Faire.