python - example - ¿Puedo servir a varios clientes utilizando solo Flask app.run() como independiente?
flask url_for (2)
Sé que puedo vincular Flask con Apache u otros servidores web. Pero, estaba pensando en ejecutar Flask como un servidor independiente que sirve a varios clientes al mismo tiempo.
es posible? ¿Debo manejar el engendramiento de múltiples hilos y administrarlos?
El uso de la simple app.run()
desde dentro de Flask crea un solo servidor síncrono en un solo subproceso capaz de servir solo a un cliente a la vez. Está destinado para su uso en entornos controlados con baja demanda (es decir, desarrollo, depuración) por exactamente esta razón.
Engendrar hilos y administrarlos usted mismo probablemente tampoco los lleve demasiado lejos, debido al Python GIL .
Dicho eso, todavía tienes algunas buenas opciones. Gunicorn es un servidor WSGI sólido y fácil de usar que te permitirá engendrar múltiples trabajadores (procesos separados, por lo que no te preocupes GIL), e incluso viene con trabajadores asincrónicos que acelerarán tu aplicación (y la harán más segura) con poco a ningún trabajo de tu parte (especialmente con Flask).
Aún así, incluso Gunicorn probablemente no debería estar directamente expuesto públicamente. En producción, debe usarse detrás de un servidor HTTP más robusto; nginx tiende a ir bien con Gunicorn y Flask.
flask.Flask.run
acepta argumentos de palabra clave adicionales ( **options
) que reenvía a werkzeug.serving.run_simple
: dos de esos argumentos están threaded
(que puede establecerse en True
para habilitar el enhebrado) y processes
(que puede establecer en un número mayor que uno para que werkzeug genere más de un proceso para manejar solicitudes). Entonces si lo haces:
if __name__ == ''__main__'':
app.run(threaded=True)
# Alternately
# app.run(processes=3)
Flask le dirá a Werkzeug que use threading y que engendre tres procesos para manejar las solicitudes entrantes.
Dicho esto, Werkzeug''s serving.run_simple
envuelve el paquete wsgiref
la biblioteca estándar, y ese paquete contiene una implementación de referencia de WSGI, no un servidor web listo para producción. Si va a usar Flask en producción (suponiendo que "producción" no es una aplicación interna de poco tráfico con no más de 10 usuarios simultáneos) asegúrese de colocarlo detrás de un servidor web real (consulte la sección de documentos de Flask titulada Opciones de implementación para algunos métodos sugeridos).