Tornado: Guía completa del framework web asíncrono de Python
¿Qué es Tornado?
Tornado es un potente servidor web y framework asíncrono para Python, diseñado específicamente para manejar una gran cantidad de conexiones simultáneas. Creado por el equipo de FriendFeed (posteriormente adquirido por Facebook), Tornado se convirtió en uno de los pioneros en la programación asíncrona con Python.
La filosofía principal de Tornado se basa en el uso de entrada/salida no bloqueante y una arquitectura orientada a eventos. Esto permite que un solo proceso atienda miles de conexiones al mismo tiempo, convirtiéndolo en la opción ideal para crear aplicaciones web de alto tráfico, chats, sistemas en tiempo real y servicios API.
Características clave y ventajas de Tornado
Arquitectura asíncrona
Tornado utiliza un modelo de programación orientado a eventos que permite procesar múltiples solicitudes en un solo hilo. Esto reduce significativamente la sobrecarga por cambio de contexto y gestión de memoria.
Servidor HTTP integrado
A diferencia de otros frameworks, Tornado incluye su propio servidor HTTP, eliminando la necesidad de componentes adicionales como WSGI para desplegar aplicaciones.
Soporte nativo para WebSocket
Tornado ofrece soporte nativo para conexiones WebSocket, lo que lo convierte en una excelente opción para crear aplicaciones interactivas en tiempo real.
Compatibilidad con asyncio
A partir de la versión 5.0, Tornado es totalmente compatible con asyncio, permitiendo usarlo junto con otras bibliotecas asíncronas de Python.
Sistema de enrutamiento flexible
Tornado proporciona un potente sistema de enrutamiento de URLs con soporte para expresiones regulares y parámetros.
Motor de plantillas integrado
El framework incluye su propio motor de plantillas para generar páginas HTML con contenido dinámico.
Instalación y configuración del entorno
Instalación de Tornado
pip install tornado
Para trabajar con funcionalidades adicionales, puedes instalar paquetes complementarios:
# Para trabajar con MongoDB
pip install motor
# Para trabajar con PostgreSQL
pip install asyncpg
# Para trabajar con Redis
pip install aioredis
Estructura del proyecto
Estructura recomendada para un proyecto Tornado:
project/
├── app.py # Archivo principal de la aplicación
├── handlers/ # Manejadores de solicitudes
│ ├── __init__.py
│ ├── base.py
│ ├── auth.py
│ └── api.py
├── models/ # Modelos de datos
│ ├── __init__.py
│ └── user.py
├── templates/ # Plantillas HTML
│ ├── base.html
│ ├── index.html
│ └── error.html
├── static/ # Archivos estáticos
│ ├── css/
│ ├── js/
│ └── images/
├── config/ # Archivos de configuración
│ ├── __init__.py
│ └── settings.py
└── requirements.txt # Dependencias del proyecto
Creación de la primera aplicación
Ejemplo básico
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("¡Bienvenido a Tornado!")
class AboutHandler(tornado.web.RequestHandler):
def get(self):
self.write("Página de nosotros")
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
(r"/about", AboutHandler),
])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
print("Servidor iniciado en http://localhost:8888")
tornado.ioloop.IOLoop.current().start()
Configuración de la aplicación con parámetros
import tornado.web
import tornado.ioloop
import os
class Application(tornado.web.Application):
def __init__(self):
handlers