tenacity añade lógica de reintento configurable a cualquier función invocable: retroceso exponencial, jitter, condiciones de parada y hooks, sin tener que escribir manualmente bucles while alrededor de llamadas de red o base de datos inestables.
Decoradores - @retry envuelve funciones síncronas; usa @retry en funciones asíncronas con espera/parada compatibles con async (o el contexto AsyncRetrying).
Políticas de parada - Combina stop_after_attempt, stop_after_delay, stop_any.
Políticas de espera - Fija, exponencial, aleatoria o una función llamada personalizada.
Predicados de reintento - retry_if_exception, retry_if_result, retry_unless_exception_type.
from tenacity import Retrying# Estilo imperativo dentro del cuerpo de un buclefor attempt in Retrying(stop=stop_after_attempt(3)): with attempt: do_work()
Reintentar POST no idempotente - Doble cargo o registros duplicados. Solución: claves de idempotencia o tabla de deduplicación.
Reintento infinito con configuración incorrecta - URL incorrecta reintenta para siempre con cron. Solución:stop_after_attempt más alerta ante el fallo final.