En mis 6 años de experiencia en codificación, sin duda, Django es el mejor framework con el que he trabajado. A veces construiremos una sencilla aplicación Django para ejecutar tareas asíncronas en segundo plano usando Apio y RabbitMQ.
Python 3.6.8, RabbitMQ 3.6.10
Django = = 2.2.3, flower = = 0.9.3, apio = = 4.3.0
instalar RabbitMQ:
apt-get install rabbitmq-server
El servicio RabbitMQ se inicia automáticamente tras la instalación. Puede iniciar el servidor manualmente ejecutando el siguiente comando en la línea de comandos.
rabbitmq-server
Después de la instalación de RabbitMQ, debe instalar python y el paquete relacionado con el comando pip como:
pip install Django
pip install celery
Luego, debe crear un proyecto Django con una aplicación simple, creamos el proyecto djangocelery con la aplicación l, puede clonar el proyecto djangocelery en mi GitHub.
Proyecto 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
El primer paso debe agregar la configuración CELERY_BROKER_URL a la settings.py archivo: configuración
.py
CELERY_BROKER_URL = ‘amqp://localhost’
Agregue Apio a su proyecto Django
Cree un archivo con el nombre celery.py junto a su `settings.py ‘ file,
|-- djangocelery/| |-- __init__.py| |-- celery.py| |-- settings.py| |-- urls.py| +-- wsgi.py
Este archivo contendrá la configuración de apio para nuestro proyecto, Agregue el siguiente código al `celery.py ‘file:
El código anterior crea una instancia de nuestro proyecto, la última línea indica a celery que descubra automáticamente todas las tareas asíncronas para todas las aplicaciones listadas en `INSTALLED_APPS`.
Celery buscará definiciones de tareas asíncronas dentro de un archivo llamado `tasks.py ‘ archivo en cada uno de los directorios de la aplicación.
Editar el __init__.py
ahora edita __init__.py archivo en la raíz del proyecto con esta ruta:
|-- djangocelery/| |-- __init__.py
ábralo y copie el código de abajo en el archivo y guárdelo.
Esto asegurará que nuestra aplicación Apio sea importante cada vez que se inicie Django.
Creando la Primera Tarea de Apio
Podemos crear un archivo llamado tareas.py dentro de una aplicación de Django y poner todas nuestras tareas de Apio en este archivo, La aplicación de Apio que creamos en la raíz del proyecto recopilará todas las tareas definidas en todas las aplicaciones de Django enumeradas en INSTALLED_APPSconfiguration.
app/tasks.py
app/views.py
en Lugar de llamar a la celery_task directamente, estoy llamando a la celery_task.delay (), De esta manera estamos instruyendo a Celery para que ejecute esta función en segundo plano, luego Django sigue procesando my view celery_view y devuelve sin problemas al usuario
djangocelery/urls.py
Pero antes de probarlo, consulte la siguiente sección para aprender a iniciar el proceso de trabajador de apio.
Iniciar el proceso de trabajo
Abra una nueva pestaña de terminal en la ruta del proyecto y ejecute el siguiente comando:
celery -A djangocelery worker -l info
El resultado es algo así:
a continuación, ejecute Django proyecto de abrir el http://127.0.0.1:8000/celerytask/ después de unos segundos, Si revisamos el Apio Proceso de trabajo de nuevo, podemos ver que completó la ejecución, la primera carga de la página terminado y enviar tareas a apio, a continuación, apio recibió tareas:
After 30seconds tasks functions done and return successful strings :
Monitoreo de trabajadores de Apio
Hay una práctica herramienta basada en la web llamada Flower que se puede usar para monitorear y administrar clústeres de Apio, Flower proporciona estadísticas detalladas del progreso y el historial de tareas, También muestra otros detalles de tareas como los argumentos pasados, la hora de inicio, el tiempo de ejecución y otros.
instalar Flor
pip install flower
una Vez instalado, se debe abrir una nueva línea de comandos en el directorio del proyecto y ejecute este comando :
celery -A djangocelery worker -l info
abra una nueva línea de comandos en la ruta del proyecto y ejecute este comando :
celery -A djangocelery flower
Los detalles, a continuación, puede ver visitando http://localhost:5555/dashboard en el navegador como :
además :
Usted puede eliminar todas las tareas pendientes con :
celery -A proj purge
Eso es todo. Terminado.