Utilice un servidor WSGI de producción para ejecutar una aplicación Flask

Salman Mehmood 15 febrero 2024
Utilice un servidor WSGI de producción para ejecutar una aplicación Flask

Aprenderemos, con esta explicación, sobre el servidor WSGI y veremos cómo funciona. También aprenderemos cómo crear un servidor WSGI y ejecutar una aplicación dentro de este servidor en Flask y Python.

Cree un servidor WSGI y ejecute una aplicación dentro del servidor en Flask y Python

La interfaz de puerta de enlace del servidor web, también conocida como WSGI, sigue el proceso cuando recibe la solicitud del cliente que apunta a una función o una clase con líneas de código. Cada línea de código se ejecuta secuencialmente y, finalmente, se proporciona la respuesta al cliente.

Luego, la aplicación maneja la solicitud posterior y sigue el mismo proceso hasta que el cliente recibe una respuesta.

Proceso de interfaz de puerta de enlace del servidor web 1

Se plantea una pregunta sobre la aplicación web: ¿todo el manejo es solo una solicitud a la vez? No, los trabajadores vienen a apoyar y manejar múltiples solicitudes simultáneamente.

Al implementar aplicaciones creadas en Django o Flask, debemos haber especificado la cantidad de trabajadores que manejan las solicitudes, lo que se hace en servidores WSGI como Gunicorn. Estos trabajadores manejan múltiples solicitudes de clientes a la vez.

Por ejemplo, tomamos una analogía de preparar el desayuno; en este caso, la persona prepara el té y la segunda persona hace un huevo, por lo que dos trabajadores están trabajando en la cocina a la vez.

Proceso de interfaz de puerta de enlace del servidor web 2

La pregunta es: ¿podemos especificar que cientos de trabajadores manejen tareas simultáneamente? No, porque el tamaño importa, y solo caben tantos trabajadores como el tamaño de la cocina.

Del mismo modo, solo podemos configurar trabajadores hasta que se agoten los recursos del servidor. Se necesitará una mayor cantidad de trabajadores para una mayor utilización de los recursos del servidor.

Generalmente, la cantidad recomendada de trabajadores es el doble de la cantidad de núcleos de CPU + 1, por lo que en el caso de un servidor con 6 núcleos de CPU serían 13 trabajadores.

Proceso de interfaz de puerta de enlace del servidor web: número de trabajadores

Ahora, veremos cómo crear una interfaz de puerta de enlace de servidor web basada en funciones básicas en Flask. Primero, crearemos un directorio dentro del directorio raíz llamado web y crearemos un archivo app.py dentro de este directorio.

Ahora, necesitaremos importar un paquete llamado wsgiref para usar WSGI, lo cual es un buen comienzo para construir un WSGI. Ahora importaremos la función make_server desde simple_server, lo que nos permitirá hacer un servidor WSGI.

from wsgiref.simple_server import make_server

A continuación, crearemos nuestra aplicación web, que será una forma muy sencilla de crear esta aplicación. Definiremos una función y la llamaremos Web_App().

Toma dos parámetros requeridos. El primero es el parámetro entorno, que es una variable de estilo CGI.

El siguiente parámetro es respuesta, y obviamente queremos ver nuestra página. Además, en la respuesta, solemos responder a información importante con encabezados como un documento HTML o un documento de texto.

A continuación, crearemos una variable que contendrá nuestro estado, una cadena. Diremos 200 OK que debe tener 4 caracteres.

def Web_App(environment, response):
    status = "200 OK"

Ahora, necesitamos crear encabezados, que aceptarán una lista, y una tupla sería su elemento porque podemos agregar múltiples encabezados dentro de esta lista como su elemento. En esta tupla, declararemos qué tipo de contenido estamos pasando.

Ahora, configuraremos nuestra respuesta usando estado y encabezados como los siguientes. Y seguimos adelante y devolvemos nuestro contenido a nuestro sitio web.

El contenido se devolverá en datos binarios.

headers = [("content-type", "text/html; charset=utf-8")]
response(status, headers)
return [b"<h2>Hi there, this is WSGI server</h2>"]

Avancemos y creemos un servidor usando el bloque with y usemos la función make_server() con esta declaración. Se necesitan un par de argumentos.

El primero es el host que sería localhost por defecto, por lo que dejamos una cadena vacía. El siguiente es el puerto que sería 5000, y luego necesitamos pasar la función Web_App() en el siguiente argumento.

Este argumento es para mostrar nuestra aplicación o cualquier contenido que queramos ofrecer. Ahora imprimiremos un mensaje para el usuario, informándole dónde encontrará su sitio web y cómo salir del servidor.

Ahora, serviremos nuestro servidor y usaremos el método serve_forever(), lo que significa servir el servidor hasta que lo eliminemos a través de la terminal o si tenemos un error en alguna parte y se autoelimina.

with make_server("", 5000, Web_App) as server:
    print(
        "serving on port 5000...\nvisit http://127.0.0.1:5000\nTo exit press ctrl + c"
    )
    server.serve_forever()

Avancemos y ejecutemos el servidor, luego vayamos al navegador donde se ejecuta nuestra aplicación. Cuando visitemos, veremos el contenido que se muestra como lo definimos dentro de nuestra aplicación.

Servidor WSGI para ejecutar una aplicación Flask - Salida

Para obtener más información sobre el servidor WSGI, haga clic aquí para leer los documentos oficiales.

Código Python completo:

from wsgiref.simple_server import make_server


def Web_App(environment, response):
    status = "200 OK"
    headers = [("content-type", "text/html; charset=utf-8")]
    response(status, headers)
    return [b"<h2>Hi there, this is WSGI server</h2>"]


with make_server("", 5000, Web_App) as server:
    print(
        "serving on port 5000...\nvisit http://127.0.0.1:5000\nTo exit press ctrl + c"
    )
    server.serve_forever()
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn