Django
Céleri en cours d'exécution avec superviseur
Recherche…
Configuration du céleri
CÉLERI
Installation - installation du
pip install django-celery
Ajouter
Structure de projet de base
- src/ - bin/celery_worker_start # will be explained later on - logs/celery_worker.log - stack/__init __.py - stack/celery.py - stack/settings.py - stack/urls.py - manage.py
Ajoutez le fichier
celery.py
à votrestack/stack/
dossier.from __future__ import absolute_import import os from celery import Celery os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'stack.settings') from django.conf import settings # noqa app = Celery('stack') app.config_from_object('django.conf:settings') app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
à votre
stack/stack/__init__.py
ajoutez le code suivant:from __future__ import absolute_import from .celery import app as celery_app # noqa
Créez une tâche et marquez-la par exemple sous la forme
@shared_task()
@shared_task() def add(x, y): print("x*y={}".format(x*y))
Travailleur de céleri en cours d'exécution "à la main":
celery -A stack worker -l info
si vous souhaitez également ajouter
Superviseur en cours d'exécution
Créez un script pour démarrer le travailleur céleri. Insérez votre script dans votre application. Par exemple:
stack/bin/celery_worker_start
#!/bin/bash NAME="StackOverflow Project - celery_worker_start" PROJECT_DIR=/home/stackoverflow/apps/proj/proj/ ENV_DIR=/home/stackoverflow/apps/proj/env/ echo "Starting $NAME as `whoami`" # Activate the virtual environment cd "${PROJECT_DIR}" if [ -d "${ENV_DIR}" ] then . "${ENV_DIR}bin/activate" fi celery -A stack --loglevel='INFO'
Ajoutez des droits d'exécution à votre script nouvellement créé:
chmod u+x bin/celery_worker_start
Installez le superviseur (ignorez ce test si le superviseur est déjà installé)
apt-get install supervisor
Ajoutez le fichier de configuration pour votre superviseur afin de démarrer votre céleri. Placez-le dans
/etc/supervisor/conf.d/stack_supervisor.conf
[program:stack-celery-worker] command = /home/stackoverflow/apps/stack/src/bin/celery_worker_start user = polsha stdout_logfile = /home/stackoverflow/apps/stack/src/logs/celery_worker.log redirect_stderr = true environment = LANG = en_US.UTF-8,LC_ALL = en_US.UTF-8 numprocs = 1 autostart = true autorestart = true startsecs = 10 stopwaitsecs = 600 priority = 998
Relire et mettre à jour le superviseur
sudo supervisorctl reread stack-celery-worker: available sudo supervisorctl update stack-celery-worker: added process group
Commandes de base
sudo supervisorctl status stack-celery-worker stack-celery-worker RUNNING pid 18020, uptime 0:00:50 sudo supervisorctl stop stack-celery-worker stack-celery-worker: stopped sudo supervisorctl start stack-celery-worker stack-celery-worker: started sudo supervisorctl restart stack-celery-worker stack-celery-worker: stopped stack-celery-worker: started
Céleri + RabbitMQ avec Superviseur
Celery nécessite un courtier pour gérer le passage des messages. Nous utilisons RabbitMQ car il est facile à installer et il est bien pris en charge.
Installer rabbitmq en utilisant la commande suivante
sudo apt-get install rabbitmq-server
Une fois l'installation terminée, créez un utilisateur, ajoutez un hôte virtuel et définissez les autorisations.
sudo rabbitmqctl add_user myuser mypassword
sudo rabbitmqctl add_vhost myvhost
sudo rabbitmqctl set_user_tags myuser mytag
sudo rabbitmqctl set_permissions -p myvhost myuser ".*" ".*" ".*"
Pour démarrer le serveur:
sudo rabbitmq-server
Nous pouvons installer le céleri avec pip:
pip install celery
Dans votre fichier de paramètres Django, votre URL de courtier ressemblerait alors à
BROKER_URL = 'amqp://myuser:mypassword@localhost:5672/myvhost'
Maintenant, lancez le travailleur du céleri
celery -A your_app worker -l info
Cette commande lance un agent Celery pour exécuter les tâches définies dans votre application Django.
Supervisor est un programme Python qui vous permet de contrôler et d’exécuter tous les processus Unix. Il peut également redémarrer les processus en panne. Nous l'utilisons pour nous assurer que les travailleurs du céleri fonctionnent toujours.
Tout d'abord, installez le superviseur
sudo apt-get install supervisor
Créez votre fichier_proj.conf dans votre superviseur conf.d (/etc/supervisor/conf.d/your_proj.conf):
[program:your_proj_celery]
command=/home/your_user/your_proj/.venv/bin/celery --app=your_proj.celery:app worker -l info
directory=/home/your_user/your_proj
numprocs=1
stdout_logfile=/home/your_user/your_proj/logs/celery-worker.log
stderr_logfile=/home/your_user/your_proj/logs/low-worker.log
autostart=true
autorestart=true
startsecs=10
Une fois notre fichier de configuration créé et enregistré, nous pouvons informer le superviseur de notre nouveau programme par la commande supervisorctl. Tout d'abord, nous indiquons à Supervisor de rechercher toute configuration de programme nouvelle ou modifiée dans le répertoire /etc/supervisor/conf.d avec:
sudo supervisorctl reread
Suivi en lui disant d'activer tous les changements avec:
sudo supervisorctl update
Une fois nos programmes lancés, il y aura sans doute un moment où nous voudrons nous arrêter, redémarrer ou voir leur statut.
sudo supervisorctl status
Pour redémarrer votre instance de céleri:
sudo supervisorctl restart your_proj_celery