Buscar..


Configuración de apio

APIO

  1. Instalación - pip install django-celery

  2. Añadir

  3. Estructura básica del proyecto.

     - 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. Agregue el archivo celery.py a su stack/stack/ carpeta.

     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. a su stack/stack/__init__.py agregue el siguiente código:

     from __future__ import absolute_import
     from .celery import app as celery_app  # noqa
    
  6. Cree una tarea y márquela, por ejemplo, como @shared_task()

     @shared_task()
     def add(x, y):
         print("x*y={}".format(x*y))
    
  7. Trabajador de apio corriendo "a mano":

    celery -A stack worker -l info si también desea agregar

Supervisor de carrera

  1. Crear una secuencia de comandos para iniciar el trabajador de apio. Inserte su script dentro de su aplicación. Por ejemplo: 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. Agregue derechos de ejecución a su script recién creado:

    chmod u+x bin/celery_worker_start

  3. Instalar supervisor (omita esta prueba si supervisor ya está instalado)

    apt-get install supervisor

  4. Agregue un archivo de configuración para su supervisor con el fin de comenzar su apio. Colóquelo en /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. Vuelva a leer y actualizar supervisor

     sudo supervisorctl reread
         stack-celery-worker: available
     sudo supervisorctl update
         stack-celery-worker: added process group
    
  6. Comandos básicos

     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
    

Apio + RabbitMQ con Supervisor

El apio requiere un corredor para manejar el paso de mensajes. Utilizamos RabbitMQ porque es fácil de configurar y está bien soportado.

Instale rabbitmq usando el siguiente comando

sudo apt-get install rabbitmq-server

Una vez que se complete la instalación, cree un usuario, agregue un host virtual y configure los permisos.

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 ".*" ".*" ".*"

Para iniciar el servidor:

sudo rabbitmq-server

Podemos instalar el apio con pip:

pip install celery

En su archivo settings.py de Django, la URL de su agente se vería como

BROKER_URL = 'amqp://myuser:mypassword@localhost:5672/myvhost'

Ahora empieza el trabajador del apio.

celery -A your_app worker -l info

Este comando inicia a un trabajador de apio para ejecutar cualquier tarea definida en su aplicación django.

Supervisor es un programa de Python que le permite controlar y seguir ejecutando cualquier proceso de Unix. También puede reiniciar procesos estrellados. Lo usamos para asegurarnos de que los trabajadores de Apio siempre estén corriendo.

Primero, instala supervisor

sudo apt-get install supervisor

Cree el archivo your_proj.conf en su supervisor 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

Una vez creado y guardado nuestro archivo de configuración, podemos informar al Supervisor de nuestro nuevo programa a través del comando supervisorctl. Primero le pedimos a Supervisor que busque cualquier configuración de programa nueva o modificada en el directorio /etc/supervisor/conf.d con:

sudo supervisorctl reread

Luego se le indica que promulgue cualquier cambio con:

sudo supervisorctl update

Una vez que nuestros programas se estén ejecutando, indudablemente habrá un momento en el que deseamos detenernos, reiniciar o ver su estado.

sudo supervisorctl status

Para reiniciar su instancia de apio:

sudo supervisorctl restart your_proj_celery


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow