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.

RabbitMQ + Celery: Número de conexiones por trabajador de Celery

Estoy tratando de implementar una aplicación web (aún soy principiante y estoy aprendiendo) y estoy teniendo problemas para entender lo que está sucediendo. Mi aplicación está escrita usando Flask y hay varias funciones que necesito ejecutar en un bucle, alimentándose esencialmente entre ellas. Para evitar ralentizar la aplicación, estoy utilizando Celery. En mi máquina local, utilicé Redis como el intermediario, pero en adelante quiero usar RabbitMQ. Ya he configurado todo esto en mi máquina virtual, pero el problema con el que sigo encontrando es que el 1 trabajador de Celery que ejecuto crea 3 conexiones y creo que esto está causando un problema con esas funciones que mencioné anteriormente.

Verás, esas funciones se ejecutan antes de que la aplicación reciba la primera solicitud. Sin embargo, creo que debido a las 3 conexiones que el 1 trabajador de Celery está creando antes de la primera solicitud, las tareas se están ejecutando varias veces. Esto no ocurre en mi máquina local, allí todo funciona como se esperaba.

¿Alguien tiene alguna idea? ¿Son estas las 3 conexiones que se están creando? Si es así, ¿cómo puedo indicarle al trabajador de Celery que no haga más de 1 conexión?

EDITAR: Desde que publiqué esto, he configurado Celery con RabbitMQ en mi máquina local utilizando la misma configuración que en la máquina virtual. Al probarlo, la aplicación funciona correctamente cuando se ejecuta desde mi máquina local. ¿Quizás esto no sea un problema con los canales?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar relacionado con el número de conexiones que está creando el trabajador de Celery. Dado que anteriormente utilizaba Redis como intermediario y no encontraba este problema, es posible que RabbitMQ esté creando más conexiones de las necesarias.

    Para limitar el número de conexiones, puedes ajustar el parámetro “CONCURRENCY” al iniciar el trabajador de Celery. Por defecto, el trabajador creará un número de procesos basado en el número de núcleos de CPU disponibles en la máquina. Sin embargo, puedes configurar manualmente el número de procesos utilizando el argumento “–concurrency” al iniciar el trabajador. Por ejemplo, si solo deseas un proceso, puedes iniciar el trabajador de la siguiente manera:

    celery -A myapp worker --concurrency=1 -l INFO
    

    Esto debería limitar el número de conexiones creadas por el trabajador a solo una. Alternativamente, puedes intentar ajustar la configuración de RabbitMQ para ver si hay alguna opción de configuración que pueda estar causando el problema.

    También es posible que el problema no esté relacionado con las conexiones en absoluto y pueda ser causado por algo completamente diferente. Vale la pena explorar otras posibles causas antes de asumir que las conexiones son la raíz del problema.

Comments are closed.