es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Concurrencia de trabajadores de apio.

Tengo un script de Python que debe ser una tarea de Celery. Mi aplicación necesita varios trabajadores concurrentes (del mismo script) porque cada trabajador necesita procesar los mensajes secuencialmente. No puedo usar el parámetro concurrency = n porque entonces los mensajes no se procesan secuencialmente, lo cual es una especie de requisito.

Así que lo que he hecho es configurar ‘n’ colas diferentes en el mensaje broker y luego iniciar ‘n’ trabajadores diferentes y cada uno de esos trabajadores procesa cada cola por separado, y he puesto concurrency = 1 en cada trabajador para que cada cola se procese secuencialmente.
Los trabajadores son del mismo script, así que para iniciar esos trabajadores tengo que copiar el script n veces y ejecutarlos todos en paralelo en diferentes hilos.

Esto no me parece la forma más eficiente de lograr esto ya que se copia el código varias veces. ¿Hay alguna otra forma de lograr esto?

Avíseme si se necesitan más detalles.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en informática especializado en Python, Celery, cola de mensajes y tareas de Celery, hay otras formas de lograr el procesamiento paralelo de mensajes mientras se asegura que se procesen secuencialmente.

    Un enfoque sería usar la configuración del multiplicador Prefetch en Celery para controlar la cantidad de mensajes que cada trabajador prefetchea. Esto asegura que cada trabajador sólo procese un mensaje a la vez, pero los mensajes pueden ser procesados en paralelo.

    Otro enfoque sería utilizar la configuración CELERY_TASK_SOFT_TIME_LIMIT para establecer un límite de tiempo para cada tarea. Esto asegura que cada tarea se complete dentro de un tiempo específico, y si supera el límite de tiempo, se termina y se reencola. Esto ayuda a evitar que una sola tarea bloquee toda la cola.

    Por último, se podría considerar el uso de la configuración CELERY_ACKS_LATE, que permite a los trabajadores reconocer las tareas sólo después de que hayan sido completadas. Esto permite que los trabajadores se concentren en procesar la tarea actual sin distraerse con nuevas tareas que se agregan a la cola.

    Todos estos enfoques pueden ayudar a mejorar la eficiencia del procesamiento de mensajes paralelos mientras se asegura que los mensajes se procesen secuencialmente.

Comments are closed.