Tinyjobs lleva las tareas en segundo plano sin dependencias a Python sobre SQLite
Una nueva biblioteca permite ejecutar trabajos en segundo plano y programar cron para aplicaciones de Python utilizando únicamente SQLite, sin necesidad de dependencias externas.
Traducido automáticamente del original en inglés.
El usuario de GitHub Piergiuseppe ha lanzado tinyjobs, una biblioteca ligera para gestionar trabajos en segundo plano y programaciones cron en aplicaciones de Python. Publicado el 27 de octubre de 2026, el proyecto permite a los desarrolladores ejecutar tareas asíncronas y síncronas usando SQLite como único backend, eliminando la necesidad de brokers de mensajes complejos como Redis o RabbitMQ para despliegues pequeños o medianos.
Qué ha ocurrido
El lanzamiento introduce un enfoque de cero dependencias para la programación de trabajos, dirigido a desarrolladores que quieren evitar la sobrecarga operativa de mantener infraestructura separada para colas de tareas. Tinyjobs es compatible con los frameworks FastAPI y Django, integrándose directamente en sus ciclos de vida. Para FastAPI, utiliza el gestor de contexto de ciclo de vida (lifespan) para iniciar un worker dentro del proceso del servidor, garantizando que los trabajos en ejecución finalicen correctamente durante el apagado. En Django, actúa como backend para la API estándar django.tasks introducida en Django 6, permitiendo que las tareas sigan siendo código Python puro mientras se aprovecha tinyjobs para su ejecución.
La biblioteca gestiona requisitos comunes como reintentos con backoff exponencial, programación cron con soporte de zona horaria y deduplicación de trabajos. Opera bajo un modelo de entrega al menos una vez (at-least-once), lo que significa que las tareas pueden ejecutarse más de una vez si un worker falla después de procesarlas pero antes de registrar el resultado. Para mitigar esto, se recomienda a los desarrolladores escribir tareas idempotentes. El sistema utiliza bloqueos basados en arrendamientos (lease-based locking) para asegurar que, si un worker muere, sus trabajos asignados queden disponibles para otros workers tras un periodo de tiempo de espera (timeout).
Detalles clave
- Cero dependencias: Funciona completamente sobre SQLite por defecto, sin requerir servicios externos para configuraciones pequeñas.
- Integración con frameworks: Soporte nativo para FastAPI mediante hooks de ciclo de vida y para Django a través del backend
django.tasks. - Modelo de concurrencia: Admite tanto tareas
async defque se ejecutan en el bucle de eventos como tareasdefejecutadas en un pool de hilos. - Opción Redis: Hay disponible un backend opcional de Redis para despliegues multi-máquina, que utiliza scripts Lua para operaciones atómicas.
- Utilidades de prueba: Incluye un backend basado en memoria y un reloj congelado para pruebas deterministas de trabajos retrasados y reintentos.
- Observabilidad: Proporciona comandos integrados para verificar estadísticas de cola y salud, incluida la detección de trabajos cron vencidos.
Contexto
Los sistemas de trabajos en segundo plano permiten a las aplicaciones descargar tareas que consumen mucho tiempo, como enviar correos electrónicos o generar informes, del ciclo principal de solicitud-respuesta. Tradicionalmente, esto requiere un broker de mensajes como Redis, RabbitMQ o PostgreSQL, lo que añade complejidad al despliegue y monitoreo. A menudo se descarta SQLite para escenarios de escritura concurrente, pero tinyjobs aprovecha características SQL específicas como RETURNING y transacciones inmediatas para gestionar de forma segura la reclamación de trabajos entre múltiples procesos de worker. Este enfoque simplifica la pila tecnológica para aplicaciones que aún no requieren la escala de los sistemas distribuidos.
Por qué importa
Para equipos que ejecutan software autoalojado, reducir la complejidad de la infraestructura es una ventaja significativa. Mantener una instancia de Redis o un clúster de RabbitMQ requiere recursos dedicados, monitoreo y estrategias de respaldo. Al usar SQLite, tinyjobs permite a empresas pequeñas y medianas mantener toda su pila de aplicación dentro de un único archivo de base de datos. Esto reduce la superficie de ataque y simplifica las copias de seguridad, ya que la cola de trabajos se incluye en los volcados estándar de la base de datos. También disminuye la barrera de entrada para añadir procesamiento en segundo plano a proyectos existentes sin refactorizar toda la arquitectura.
Sin embargo, esta simplicidad conlleva compromisos. SQLite no admite escrituras paralelas verdaderas entre diferentes máquinas, por lo que el backend por defecto está limitado a un solo servidor. Aunque el backend de Redis aborda esto, reintroduce la dependencia que la biblioteca pretende evitar. Además, el modelo de entrega al menos una vez requiere un diseño cuidadoso de las tareas para prevenir efectos secundarios duplicados, como cobrar dos veces a un cliente. Los equipos deben sopesar la facilidad operativa frente a estas restricciones técnicas al elegir un planificador de trabajos.
Qué puedes hacer
- Evalúa tu escala: Si tu aplicación se ejecuta en un solo servidor o un pequeño clúster, prueba tinyjobs con SQLite para ver si cumple con tus necesidades de rendimiento.
- Verifica la idempotencia: Revisa las tareas en segundo plano existentes para asegurarte de que puedan reintentarse de forma segura sin causar corrupción de datos ni acciones duplicadas.
- Prueba el comportamiento de apagado: Utiliza los hooks de ciclo de vida proporcionados en FastAPI o Django para verificar que los trabajos se completen o se vuelvan a encolar correctamente durante los reinicios del despliegue.
- Monitorea los arrendamientos: Configura tiempos de espera (timeouts) de arrendamiento adecuados basados en tus tareas de mayor duración para evitar reejecuciones prematuras si un worker se cuelga.
- Considera Redis para el crecimiento: Planifica una ruta de migración al backend de Redis si anticipas escalar más allá de una sola máquina, asegurando que tus tareas sean compatibles con la latencia de red.
- Usa las comprobaciones integradas: Implementa chequeos de salud regulares usando
tinyjobs checkpara detectar workers estancados o programaciones cron perdidas con antelación.



