loglevel debug python flask machine-learning gunicorn

python - debug - gunicorn time



Cómo ejecutar Flask con Gunicorn en modo multiproceso (2)

Tengo la aplicación web escrita en matraz. Según lo sugerido por todos, no puedo usar Flask en producción. Así que pensé en Gunicorn con Flask .

En la aplicación Flask estoy cargando algunos modelos de Machine Learning. Estos son de tamaño 8GB colectivamente. La concurrencia de mi aplicación web puede llegar hasta 1000 solicitudes . Y la memoria RAM de la máquina es de 15GB.
Entonces, ¿cuál es la mejor manera de ejecutar esta aplicación?


Lo mejor que puedes hacer es usar el modo pre-fork ( preload_app=True ). Esto inicializará su código en un proceso "maestro" y luego simplemente desechará los procesos de trabajo para manejar las solicitudes. Si está ejecutando Linux y asumiendo que su modelo es de solo lectura, el sistema operativo es lo suficientemente inteligente como para reutilizar la memoria física entre todos los procesos.


Puede iniciar su aplicación con varios trabajadores o trabajadores asíncronos con Gunicorn.

Frasco server.py

from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run()

Gunicorn con gevent async worker

gunicorn server:app -k gevent --worker-connections 1000

Gunicorn 1 trabajador 12 hilos:

gunicorn server:app -w 1 --threads 12

Gunicornio con 4 trabajadores (multiprocesamiento):

gunicorn server:app -w 4

Más información sobre la concurrencia de Flask en este post: ¿Cuántas solicitudes simultáneas recibe un solo proceso de Flask? .