Uvicorn: Guía completa del servidor ASGI de alto rendimiento
¿Qué es Uvicorn?
Uvicorn es un servidor ASGI moderno, ligero y de alto rendimiento, escrito en Python. Está diseñado específicamente para ejecutar aplicaciones web asíncronas y es uno de los servidores más rápidos para aplicaciones Python. Uvicorn está construido sobre las bibliotecas uvloop y httptools, lo que garantiza un rendimiento excepcional al manejar una gran cantidad de solicitudes simultáneas.
El servidor admite protocolos y tecnologías web modernas, incluyendo HTTP/1.1, WebSocket, y puede funcionar con cualquier framework compatible con ASGI, como FastAPI, Starlette, Django Channels y otros.
Principales ventajas y características
Ventajas arquitectónicas
Uvicorn representa un gran avance en el ámbito de los servidores web Python gracias a las siguientes características:
Asincronía a nivel de núcleo — utiliza una arquitectura orientada a eventos que permite manejar miles de conexiones simultáneas con un consumo mínimo de recursos.
Alto rendimiento — gracias a la integración con uvloop (implementación rápida de asyncio) y httptools (analizador HTTP rápido), Uvicorn ofrece un rendimiento comparable al de servidores en Go y Node.js.
Soporte de protocolos modernos — soporte nativo para WebSocket, HTTP/1.1, y posibilidad de trabajar con HTTP/2 a través de proxies adicionales.
Requisitos mínimos del sistema — optimizado para funcionar tanto en máquinas locales de desarrollo como en servidores de producción.
Características técnicas
Uvicorn implementa la especificación ASGI 3.0, lo que lo hace compatible con una amplia gama de frameworks Python modernos. El servidor admite la detección automática de cambios en el código durante el desarrollo, modo multiproceso para producción y un sistema de configuración flexible.
Comparación entre ASGI y WSGI
Entender las diferencias entre ASGI y WSGI es fundamental para elegir el servidor adecuado:
| Característica | WSGI (Web Server Gateway Interface) | ASGI (Asynchronous Server Gateway Interface) |
|---|---|---|
| Modelo de ejecución | Síncrono, bloqueante | Asíncrono, no bloqueante |
| Soporte async/await | No | Soporte completo |
| WebSocket | No compatible | Soporte nativo |
| HTTP/2 | Soporte limitado | Soporte completo |
| Tareas en segundo plano | Requieren procesos separados | Soporte integrado |
| Rendimiento | Limitado por número de hilos | Alto gracias al bucle de eventos |
| Ejemplos de servidores | Gunicorn, uWSGI, mod_wsgi | Uvicorn, Hypercorn, Daphne |
| Frameworks | Flask, Django (antes de 3.0), Bottle | FastAPI, Starlette, Django 3.0+, Quart |
ASGI es la evolución de WSGI, diseñado para aplicaciones web modernas que requieren alto rendimiento y soporte de funciones en tiempo real.
Instalación y configuración inicial
Instalación con pip
pip install uvicorn
Instalación con dependencias adicionales
# Para máximo rendimiento
pip install uvicorn[standard]
# Incluye uvloop, httptools, websockets, watchgod, python-dotenv
Ejemplo mínimo de aplicación
Crea un archivo main.py:
fro