Lapinq¶
Una cola de tareas ligera con backend PostgreSQL — reemplazando Celery + RabbitMQ con un solo contenedor.
Características¶
- API simple: Decora tus funciones con
@tasks.task()para encolarlas - Backend PostgreSQL: Sin necesidad de un broker separado — las tareas se almacenan en PostgreSQL
- Ejecutor Rust: Las funciones síncronas se ejecutan vía Rust embebido (PyO3), evitando la sobrecarga de subprocesos
- Worker integrado: Ejecuta servidor + worker en un solo proceso con la flag
--worker - Dashboard en tiempo real: Dashboard vía WebSocket con actualizaciones instantáneas gracias a
LISTEN/NOTIFYde PostgreSQL - Soporte TTL: Configura la expiración de tareas — se eliminan automáticamente tras un TTL configurable
- Filtros avanzados: Busca tareas por ID, estado, cola, argumentos, resultado y contenido de error
- DLQ (Dead Letter Queue): Las tareas fallidas están disponibles para inspección y reencolado
- Métricas Prometheus: Expone métricas de la cola para monitoreo
- Concurrencia configurable: Controla cuántas tareas se ejecutan simultáneamente
- Worker Rust (opcional): Binario standalone de alto rendimiento
- Autenticación y rate limiting: Autenticación opcional por API key y limitación por IP
- Paquete PyPI: Instala con
pip install lapinq
Inicio Rápido¶
from lapinq import TaskQueue
tasks = TaskQueue(server_url="http://localhost:8001", queue_name="video")
@tasks.task(name="procesar_video")
def procesar_video(video_id: int, codec: str):
print(f"Procesando video {video_id} con {codec}")
# Encola la tarea — devuelve un TaskRef
ref = procesar_video.queue(1, codec="h264")
print(ref.task_id) # "uuid-..."
print(ref.wait(timeout=30)) # sondea el resultado
Arquitectura¶
┌──────────────┐ HTTP ┌──────────────────┐ SQL ┌────────────┐
│ App Web │ ──────────► │ Servidor │ ─────────► │ PostgreSQL │
│ (FastAPI/ │ │ Lapinq │ │ │
│ Django) │ │ (Starlette + │ │ tareas │
│ │ │ Worker Interno)│ └────────────┘
└──────────────┘ │ - API REST │
│ - Dashboard(WS) │
│ - Worker (opt.) │
└───────────────────┘
O con worker Rust separado para producción:
┌──────────────┐ HTTP ┌──────────────────┐
│ App Web │ ──────────► │ Servidor │ ────┐
│ (FastAPI/ │ │ Lapinq │ │
│ Django) │ │ (sin worker) │ │
│ │ └──────────────────┘ │ SQL
│ │ │
└──────────────┘ ┌──────────────────┐ │
│ Worker Rust │ ◄───┘
│ (binario │
│ lapinq- │
│ worker) │
└──────────────────┘