Reintentos con backoff en Python
El backoff exponencial es la forma cortés de reintentar llamadas inestables.
import time
def reintentar(fn, intentos=3, demora=0.5):
for intento in range(intentos):
try:
return fn()
except Exception:
if intento == intentos - 1:
raise
time.sleep(demora * (2 ** intento))
Cómo funciona
- Llama a la función y retorna si hay éxito.
- Ante la falla,
time.sleepespera, duplicando la demora en cada intento. - La falla final relanza la excepción original.
Palabras clave y builtins usados aquí
defexceptforifraiserangereturntry
El intento, en números
- Líneas
- 10
- Caracteres a escribir
- 193
- Tokens
- 54
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 31 segundos.
Paso 5 de 5 en Decoradores y clausuras; paso 9 de 53 en Python pythónico.