Django
Ejecución de apio con supervisor
Buscar..
Configuración de apio
APIO
Instalación -
pip install django-celery
Añadir
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
Agregue el archivo
celery.py
a sustack/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)
a su
stack/stack/__init__.py
agregue el siguiente código:from __future__ import absolute_import from .celery import app as celery_app # noqa
Cree una tarea y márquela, por ejemplo, como
@shared_task()
@shared_task() def add(x, y): print("x*y={}".format(x*y))
Trabajador de apio corriendo "a mano":
celery -A stack worker -l info
si también desea agregar
Supervisor de carrera
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'
Agregue derechos de ejecución a su script recién creado:
chmod u+x bin/celery_worker_start
Instalar supervisor (omita esta prueba si supervisor ya está instalado)
apt-get install supervisor
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
Vuelva a leer y actualizar supervisor
sudo supervisorctl reread stack-celery-worker: available sudo supervisorctl update stack-celery-worker: added process group
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