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? .