2012-06-07 12 views
70

Estoy construyendo una aplicación con Flask, pero no sé mucho sobre WSGI y su base HTTP, Werkzeug. Cuando empiezo a servir una aplicación Flask con gunicorn y 4 procesos de trabajo, ¿esto significa que puedo manejar 4 solicitudes simultáneas?¿Cuántas solicitudes concurrentes recibe un solo proceso de Frasco?

Me refiero a solicitudes simultáneas, y no solicitudes por segundo o cualquier otra cosa.

Gracias!

Respuesta

104

Al ejecutar el servidor de desarrollo que ejecuta app.run(), obtiene un solo proceso síncrono, lo que significa que se procesan como máximo 1 solicitud a la vez.

Al pegar Gunicorn delante de él en su configuración predeterminada y simplemente aumentar el número de --workers, lo que obtienes es básicamente una cantidad de procesos (gestionados por Gunicorn) que se comportan como el servidor de desarrollo app.run(). 4 trabajadores == 4 solicitudes concurrentes. Esto se debe a que Gunicorn usa el tipo de trabajador incluido sync de forma predeterminada.

Es importante señalar que Gunicorn también incluye a los trabajadores, a saber asíncronos eventlet y gevent (y también tornado, pero eso es mejor utilizar con el marco del tornado, lo que parece).Al especificar uno de estos trabajadores de sincronización con la bandera --worker-class, lo que obtiene es que Gunicorn administre una serie de procesos asíncronos, , cada uno de los cuales administra su propia concurrencia. Estos procesos no usan hilos, sino corutinas. Básicamente, dentro de cada proceso, aún solo puede suceder 1 cosa a la vez (1 hilo), pero los objetos pueden 'pausarse' cuando esperan que los procesos externos finalicen (piense en las consultas a la base de datos o en la E/S de red).

Esto significa que, si utiliza uno de los trabajadores de sincronización de Gunicorn, cada trabajador puede manejar muchas más de una sola solicitud a la vez. El número de trabajadores que mejor depende de la naturaleza de su aplicación, su entorno, el hardware en el que se ejecuta, etc. Se pueden encontrar más detalles en la página Gunicorn's design y notes on how gevent works en su página de introducción.

+2

Gunicorn ahora admite subprocesos "reales" desde la versión 19. Consulte [this] (http: //docs.gunicorn. org/en/stable/design.html # how-many-threads) y [this] (http://docs.gunicorn.org/en/stable/settings.html#threads). –

7

No, definitivamente puede manejar más que eso.

Es importante recordar que, en el fondo, suponiendo que ejecuta una máquina de núcleo único, la CPU realmente solo ejecuta una instrucción * a la vez.

A saber, la CPU solo puede ejecutar un conjunto muy limitado de instrucciones, y no puede ejecutar más de una instrucción por ciclo de reloj (muchas instrucciones incluso toman más de 1 tilde).

Por lo tanto, la mayoría de concurrencia de la que hablamos en ciencias de la computación es concurrencia de software. En otras palabras, hay capas de implementación de software que abstraen de nosotros la CPU de nivel inferior y nos hacen pensar que estamos ejecutando código al mismo tiempo.

Estas "cosas" pueden ser procesos, que son unidades de código que se ejecutan simultáneamente en el sentido de que cada proceso piensa que se está ejecutando en su propio mundo con su propia memoria no compartida.

Otro ejemplo son los hilos, que son unidades de código dentro de los procesos que también permiten la concurrencia.

La razón por la cual sus 4 procesos de trabajo podrán manejar más de 4 solicitudes es que dispararán hilos para manejar más y más solicitudes.

El límite de solicitud real depende del servidor HTTP elegido, O, SO, hardware, conexión de E/red, etc.

Buena suerte!

* las instrucciones son los comandos más básicos que la CPU puede ejecutar. ejemplos: agregue dos números, salte de una instrucción a otra

+1

¿Está el gunicornio engendrando los hilos o el matraz? No encontré ninguna evidencia que respalde ninguna de las posibilidades. –

+2

gunicorn genera los procesos – Carson

+0

Claro, entiendo eso sobre los procesos, pero la respuesta dice que se generan más hilos según sea necesario. De eso es de lo que me gustaría tener confirmación. –

18

El frasco procesará una solicitud por cadena al mismo tiempo. Si tiene 2 procesos con 4 hilos cada uno, son 8 solicitudes simultáneas.

El matraz no engendra ni administra hilos o procesos. Esa es la responsabilidad del portal WSGI (por ejemplo, gunicornio).

Cuestiones relacionadas