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.

Reiniciar elegantemente el servicio del app de Flask en systemd.

Estoy usando nginx y gunicorn para servir la aplicación Flask. El problema es que cuando hago algún cambio en las APIs y quiero que esos cambios tengan efecto, estoy haciendo:

sudo service nginx reload && sudo systemctl restart myapp

Pero a veces devuelve errores 502. Mi suposición es que ya existen solicitudes de API en curso atendidas por el servidor mientras estoy haciendo systemctl restart myapp.

¿Cuál es la mejor manera de recargar el servicio sin tiempo de inactividad y sin afectar también las llamadas de API existentes?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una solución para recargar el servicio sin tiempo de inactividad y sin afectar las llamadas API existentes es utilizar la función de recarga en caliente de Gunicorn. Esto se puede hacer enviando una señal HUP al proceso de Gunicorn.

    En primer lugar, inicia Gunicorn con la opción --reload. Esto permitirá la recarga en caliente de la aplicación cuando haya cambios.

    gunicorn myapp:app --bind 127.0.0.1:8000 --reload
    

    Luego, para recargar la aplicación sin tiempo de inactividad, envía una señal HUP al proceso de Gunicorn:

    kill -HUP <pid_del_proceso_gunicorn>
    

    Esto recargará de forma segura los trabajadores de Gunicorn, y todas las nuevas solicitudes serán manejadas por los nuevos trabajadores que han recargado el código actualizado.

    Ten en cuenta que en este caso no se debe reiniciar systemd. Nginx puede seguir redireccionando las solicitudes a Gunicorn en el mismo puerto, y las conexiones existentes no se verán interrumpidas.

Comments are closed.