Recherche…


Configuration du céleri

CÉLERI

  1. Installation - installation du pip install django-celery

  2. Ajouter

  3. 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
    
  4. Ajoutez le fichier celery.py à votre stack/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)
    
  5. à votre stack/stack/__init__.py ajoutez le code suivant:

     from __future__ import absolute_import
     from .celery import app as celery_app  # noqa
    
  6. 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))
    
  7. 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

  1. 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'
    
  2. Ajoutez des droits d'exécution à votre script nouvellement créé:

    chmod u+x bin/celery_worker_start

  3. Installez le superviseur (ignorez ce test si le superviseur est déjà installé)

    apt-get install supervisor

  4. 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
    
  5. Relire et mettre à jour le superviseur

     sudo supervisorctl reread
         stack-celery-worker: available
     sudo supervisorctl update
         stack-celery-worker: added process group
    
  6. 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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow