En este artículo presentamos varios servidores web Python que puede utilizar para desplegar sus aplicaciones Python.

Empezaremos por comprender cómo funcionan los servidores web y la necesidad de interfaces de pasarela de servidor. Después, repasaremos la lista de servidores web Python junto con sus características más destacadas. La mayoría de ellos están disponibles como paquetes PyPI que puede instalar y empezar a utilizar en sus proyectos.

Comencemos

¿Qué es un servidor web?

Cuando desarrolle una aplicación Python, utilizará el servidor de desarrollo para probar su aplicación. Sin embargo, una vez completado el desarrollo, tendrá que desplegar su aplicación en un servidor de producción. Entre varias capas de funcionalidad añadida por encima, un servidor web debería tener la funcionalidad básica de un servidor HTTP.

python-web-server

El servidor web Python debe ser capaz de manejar peticiones HTTP (peticiones HTTP simples como GET, PUT y POST) de clientes, como navegadores web, y devolver la respuesta. Esta respuesta puede incluir el código de estado HTTP que indica si la solicitud se procesó correctamente o no. Puede consistir en páginas web HTML y datos semiestructurados como JSON, XML, etc.

ASGI vs. WSGI: Entendiendo las Interfaces de Pasarela de Servidor

Supongamos que ha desarrollado una aplicación Python en un framework de su elección, digamos, Django o Flask. Un servidor convencional puede ser incapaz de entender y procesar las peticiones dirigidas a la aplicación Python. Aquí es donde entran en juego las interfaces de pasarela de servidor.

Esta interfaz de pasarela puede ser una interfaz de pasarela de servidor web(WSGI) o una interfaz de pasarela de servidor asíncrono(ASGI). El servidor web recibe una solicitud de un cliente, que redirige a la interfaz de pasarela del servidor. La interfaz (WSGI/ASGI) interactúa con la aplicación Python a través de un callable expuesto.

python-web-server-asgi-wsgi

La interfaz de la pasarela del servidor web (WSGI) gestiona las peticiones de forma secuencial. Si hay múltiples peticiones HTTP lentas, entonces impactarán en el rendimiento.

Asynchronous Server Gateway Interface, o ASGI, es un sucesor de WSGI y tiene la capacidad adicional de manejar peticiones de forma asíncrona.

Supongamos que una solicitud atendida en ese momento requiere una lectura de la base de datos (que potencialmente puede llevar mucho tiempo) y está esperando la respuesta. Cuando la primera solicitud está esperando una respuesta, ASGI puede gestionar una segunda solicitud entrante.

Esto contrasta con WSGI, donde la primera petición debe procesarse antes que la segunda. Por lo tanto, el uso de ASGI puede resultar en un mayor rendimiento. ASGI también le permite utilizar las capacidades asíncronas de Py thon dentro de su aplicación.

Servidores Web Python

Ahora, vamos a enumerar los servidores web que puede utilizar para sus aplicaciones Python. También hemos incluido ciertos frameworks que proporcionan soporte «out-of-the-box» para servidores listos para producción. Esta no es una lista exhaustiva, y las recomendaciones de servidores web a continuación no están en ningún orden en particular.

Uvicorn

Si está familiarizado con el desarrollo de aplicaciones con FastAPI, se habrá encontrado con Uvicorn, una implementación de servidor web. Uvicorn es una implementación de servidor ASGI para Python.

python-web-server-uvicorn

Para instalar Uvicorn y las dependencias asociadas utilizando pip, ejecute el siguiente comando:

$ pip install uvicorn[standard] 
# incluye la instalación de dependencias opcionales y basadas en Cython

A continuación se detallan las características más destacadas de Uvicorn:

  • Implementación ASGI
  • Soporte para ejecutar aplicaciones desde un entorno Python asíncrono
  • Herramienta de línea de comandos con una extensa lista de opciones
  • Admite la ejecución de aplicaciones desde funciones de fábrica
  • Proporciona funciones para controlar las instancias del servidor mediante programación

Gunicorn

Gunicorn es un servidor WSGI para aplicaciones Python, muy conocido por sus avanzadas funciones de gestión de procesos.

gunicorn-python-web-server

Uvicorn proporciona una clase trabajadora Gunicorn, lo que le permite obtener ventajas de rendimiento y gestión de procesos simultáneamente. Esta página de documentación contiene detalles sobre el despliegue de Gunicorn.

Si tiene Python 3.5 y posterior, puede instalar Gunicorn utilizando pip:

$ pip install gunicorn

Las siguientes son las características más destacadas de Gunicorn:

  • Simple y rápido
  • Compatible con muchos frameworks web
  • Soporte para su uso con un servidor proxy HTTP
  • Manejo avanzado de procesos

CherryPy

CherryPy es un framework web de Python-como Django, Flask y FastAPI-pero no tan popular como estos frameworks. Con varias versiones estables, CherryPy ha existido y ha evolucionado en un framework completo por más de una década. También cuenta con una comunidad de desarrolladores que lo apoya.

cherrypy

Puede consultar el interesante Zen de CherryPy, que transmite la esencia de que CherryPy es un framework sencillo y minimalista pero potente.

CherryPy es un framework Python y no un servidor web, pero está en nuestra lista ya que soporta de forma nativa un servidor de grado de producción, a diferencia de la mayoría de los otros frameworks.

Para instalar CherryPy y comenzar, ejecute:

$ pip install CherryPy

Las siguientes son las características sobresalientes de CherryPy:

  • Framework pitónico que utiliza Python orientado a objetos; muy adecuado para principiantes
  • Soporta un servidor HTTP listo para producción, Cheroot
  • Más fácil de aprender que otros frameworks web, como Django
  • Soporte para construir y desplegar aplicaciones web sencillas a microservicios

Django

Django es uno de los frameworks web de Python más populares. Si ha desarrollado aplicaciones con Django, es probable que haya utilizado el servidor web Daphne. Daphne es una de las primeras implementaciones de servidores ASGI utilizadas como referencia para implementaciones de servidores ASGI.

Daphne está disponible como un paquete PyPI que puede instalar utilizando pip.

$ pip install daphne

Aquí hay un tutorial detallado que le guiará a través de la construcción de una aplicación Python full-stack lista para producción.

A continuación se enumeran las características más destacadas de Daphne:

  • Ampliamente adoptado en entornos de producción
  • Referencia para todas las implementaciones de servidores ASGI
  • Compatibilidad con los protocolos HTTP, HTTP2 y WebSocket

Python Trio

El proyecto Trio tiene como objetivo proporcionar capacidades de E/S asíncronas de nivel de producción: soporte para E/S paralela y concurrencia. Este proyecto también cuenta con varias bibliotecas Python web y HTTP.

Puede instalar la última versión de Trio (junio de 2022) desde PyPI.

$ pip install trio

Aquí tiene una lista de bibliotecas Trio útiles para la programación web con Python:

  • hypercorn: Hypercorn es un servidor ASGI que soporta HTTP
  • muffin: Muffin es un framework web ASGI para Python
  • startlette: Starlette es un framework ASGI ligero
  • trio-websocket: soporte para <a href="https://geekflare.com/es/websocket-servers/">servidor</a> y cliente <a href="https://geekflare.com/es/websocket-servers/">WebSocket</a> </li><li><code>httpx: Cliente HTTP para Python

Web Twisted

Twisted es un framework para aplicaciones Python. Este marco dirigido por eventos incluye un módulo para la programación web llamado twisted.web.

Puede instalar Twisted y los módulos asociados utilizando pip:

$ pip install Twisted

A continuación se enumeran las características más destacadas de Twisted:

  • Características fáciles de usar para el desarrollador, como las pruebas unitarias y la comprobación estática del código
  • twisted.web proporciona un servidor WSGI y soporte para clientes y servidores HTTP

AIOHTTP

AIOHTTP es una biblioteca de Python que proporciona capacidades del lado del cliente y del servidor a través de las API de cliente y servidor.

Aquí hay un vídeo útil que explica las capacidades de programación asíncrona en el lado del cliente para acelerar significativamente las solicitudes a las API.

Las siguientes son las características más destacadas de AIOHTTP:

  • Compatibilidad tanto con el servidor HTTP como con el cliente
  • Soporte de registro para facilitar la depuración; proporciona registro para un cliente, servidor, sockets web y más
  • Soporte nativo para pruebas a través del plugin pytest para pruebas: pytest-aiohttp, que está disponible como paquete PyPI

Tornado

Tornado es otro framework web de Python que soporta redes asíncronas. En los últimos años, ha habido muchas versiones estables de Tornado – la versión más reciente 6.2, fue lanzada en julio de 2022. Actualmente, Tornado soporta Python 3.7 y posteriores.

Como la mayoría de los paquetes de esta lista, Tornado también puede instalarse mediante pip:

$ pip install tornado

Las siguientes son las características más destacadas de Tornado:

  • Soporta servidor HTTP tornado.httpserver y cliente
  • Escalable y utiliza E/S de red no bloqueante
  • Muy adecuado para aplicaciones que requieren conectividad durante un intervalo de tiempo sustancialmente más largo
  • Utilidades para registro, pruebas unitarias y más
  • Perfecta integración con servicios para la autenticación

Meinheld

Meinheld es un servidor WSGI para Python. Utiliza y construye librerías existentes para el manejo de eventos y el procesamiento de peticiones HTTP.

Puede instalar Meinheld utilizando pip:

$ pip install meinheld

Algunas características de Meinheld:

  • Utiliza la biblioteca http-parser para manejar las peticiones HTTP entrantes
  • Construye sobre la librería picoev para el manejo de eventos

Conclusión

Espero que haya encontrado útil esta lista de servidores web Python. Asegúrese de probarlos en sus futuros proyectos. Hemos enumerado las características clave; para entender completamente las dependencias y cómo funcionan, tendrá que utilizarlos en sus aplicaciones. 👩🏽‍💻

Si desea mejorar sus conocimientos de Python, considere la posibilidad de consultar la biblioteca de tutoriales de Python de Geekflare. ¡Feliz codificación!