python - results - Diferencia de apio entre concurrencia, trabajadores y autoescalado
python celery rate limit (1)
Distingamos entre trabajadores y procesos de trabajo. Usted engendra un trabajador de apio, esto genera una serie de procesos (dependiendo de --autoscale
como --autoscale
y --autoscale
, el valor predeterminado es engendrar tantos procesos como núcleos en la máquina). No tiene sentido ejecutar más de un trabajador en una máquina en particular, a menos que desee hacer el enrutamiento.
Sugeriría ejecutar solo 1 trabajador por máquina con la cantidad predeterminada de procesos. Esto reducirá el uso de memoria al eliminar la duplicación de datos entre los trabajadores.
Si todavía tiene problemas de memoria, guarde los datos en una tienda y pase solo una identificación a los trabajadores.
En mi archivo de configuración /etc/defaults/celeryd
, configuré:
CELERYD_NODES="agent1 agent2 agent3 agent4 agent5 agent6 agent7 agent8"
CELERYD_OPTS="--autoscale=10,3 --concurrency=5"
Entiendo que el daemon engendra a 8 trabajadores de apio, pero no estoy completamente seguro de qué hacen la autoscale
y la concurrency
juntas. Pensé que la concurrencia era una forma de especificar el número máximo de hilos que un trabajador puede usar y la autoescala era una forma para que el trabajador escale hacia arriba y hacia abajo a los niños trabajadores, si es necesario.
Las tareas tienen una carga útil grande (alrededor de 20-50kB) y hay como 2-3 millones de esas tareas, pero cada tarea se ejecuta en menos de un segundo. Veo que el uso de la memoria aumenta porque el intermediario distribuye las tareas a cada trabajador y, por lo tanto, replica la carga varias veces.
Creo que el problema está en la configuración y que la combinación de trabajadores + concurrencia + autoescalado es excesiva y me gustaría obtener una mejor comprensión de lo que hacen estas tres opciones.