Ejecución de varios trabajadores con apio

11

Necesito leer de Rabbitmq y ejecutar tareas en paralelo usando Celery en un solo sistema.

[2014-12-30 15:54:22,374: INFO/Worker-1] ...   
[2014-12-30 15:54:23,401: INFO/Worker-1] ...
[2014-12-30 15:54:30,878: INFO/Worker-1] ...
[2014-12-30 15:54:32,209: INFO/Worker-1] ...
[2014-12-30 15:54:33,255: INFO/Worker-1] ...
[2014-12-30 15:54:48,445: INFO/Worker-1] ...
[2014-12-30 15:54:49,811: INFO/Worker-1] ...
[2014-12-30 15:54:50,903: INFO/Worker-1] ...
[2014-12-30 15:55:39,674: INFO/Worker-1] ...
[2014-12-30 15:55:41,024: INFO/Worker-1] ...
[2014-12-30 15:55:42,147: INFO/Worker-1] ...

Parece que solo 1 trabajador está funcionando todo el tiempo ... es decir, uno tras otro en orden secuencial. ¿Cómo puedo configurar Celery para ejecutar varios trabajadores para que funcionen en paralelo?

SrC
fuente

Respuestas:

17

Ahora he actualizado mi respuesta después del comentario de MartinP con respecto a los procesos secundarios de generación de trabajadores, no hilos:

Apio workery worker processesson cosas diferentes ( Lea esto como referencia ).

Cuando se inicia un trabajador, genera un cierto número de procesos secundarios.

El número predeterminado de esos procesos es igual a un número de núcleos en esa máquina.

En Linux puede verificar el número de núcleos a través de:

$ nproc --all

De lo contrario, puede especificarlo usted mismo, por ejemplo:

$ celery -A proj worker --loglevel=INFO --concurrency=2

En el ejemplo anterior, hay un trabajador que podrá generar 2 procesos secundarios. Normalmente se recomienda ejecutar un solo trabajador por máquina y el valor de concurrencia definirá cuántos procesos se ejecutarán en paralelo, pero si se requieren varios trabajadores para ejecutar, puede iniciarlos como se muestra a continuación:

$ celery -A proj worker -l info --concurrency=4 -n wkr1@hostname
$ celery -A proj worker -l info --concurrency=2 -n wkr2@hostname
$ celery -A proj worker -l info --concurrency=2 -n wkr3@hostname

Consulte los documentos de apio para obtener más información.

elnurcoot
fuente
3
El parámetro concurency no ejecuta subprocesos. Ejecuta procesos secundarios de manera predeterminada, por lo que procesa tareas en paralelo - docs.celeryproject.org/en/latest/reference/…
MartinP
¿Cómo se relacionan la concurrencia y los hilos? Si la concurrencia predeterminada es el número de núcleos de la máquina, ¿cuál será el número de hilos? ¿Es configurable?
Thomas John
@ThomasJohn Creo que el número predeterminado de subprocesos sigue siendo el número de núcleos de la máquina. En general, querrá establecer el indicador de --concurrencia alto para los trabajadores basados ​​en subprocesos.
FragLegs
0

He encontrado esto

http://docs.celeryproject.org/en/latest/reference/celery.html?highlight=parallel

Puede buscar primitivas de Canvas allí, puede ver cómo hacer grupos para ejecución paralela.

class celery.group (task1 [, task2 [, task3 [, ... taskN]]]) Crea un grupo de tareas que se ejecutarán en paralelo.

De lo contrario, una buena manera es ir al canal IRC y hacer preguntas especiales. Normalmente hay personas que lo saben muy bien y pueden ayudarlo.

René Höhle
fuente
0

Parece que su trabajador solo está ejecutando un solo proceso / hilo. Probablemente solo necesite agregar el argumento --concurrencyo-c al iniciar el trabajador para generar múltiples instancias de trabajador (paralelas).

celery -A proj worker -c 4
Jamie B
fuente