backon: biblioteca Python sin dependencias para reintentos con backoff, síncrona y asíncrona

Fuentes: backon: zero-dependency Python library for retry with backoff and circuit breaker

backon es una biblioteca de Python sin dependencias externas diseñada para reintentar funciones que han fallado, aplicando estrategias de backoff (retardo progresivo entre intentos). Se presenta como una evolución moderna de la librería backoff original del proyecto litl, manteniendo la promesa de cero dependencias —solo usa la biblioteca estándar— y amplía la compatibilidad con Python 3.10 o superior.

La herramienta expone cuatro interfaces de uso: dos decoradores (@on_exception, para reintentar cuando se lanza una excepción concreta; @on_predicate, para reintentar según el valor devuelto por la función), una API funcional (backon.retry), un gestor de contexto (Retrying) y objetos invocables (RetryingCaller / AsyncRetryingCaller) que permiten vincular de antemano el tipo de excepción. Las versiones síncrona y asíncrona comparten la misma firma, lo que facilita migrar entre ambos modelos, incluido el uso con el framework asíncrono Trio.

Entre las estrategias de espera se incluyen backoff exponencial, intervalo constante, Fibonacci, decay exponencial, incremento lineal, tiempos aleatorios, tiempos dinámicos basados en el valor de retorno o en cabeceras Retry-After, y cadenas componibles de varios generadores. El comportamiento del retardo puede ajustarse con jitter completo, jitter aleatorio o sin jitter, y admite inyección de una función de sleep personalizada —útil en pruebas con asyncio.Event.

El módulo añade además capacidades avanzadas: circuit breaker con estados CLOSED/OPEN/HALF_OPEN, hedging para emitir peticiones concurrentes y quedarse con la primera respuesta exitosa, métricas opcionales para Prometheus y OpenTelemetry, y un módulo de testing con utilidades como disable_retries(), limit_retries() o assert_retried(). Incluye tipado completo compatible con mypy en modo estricto, instalación mediante PEP 621 y un interruptor global (backon.disable() / backon.enable()) pensado para tests. La distribución se realiza como pip install backon.