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?

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.


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.