Retroceso exponencial: time.sleep with random.randint (0, 1000) / 1000

En muchos ejemplos de código de google api he visto esta línea de código.

time.sleep((2 ** n) + (random.randint(0, 1000) / 1000)) 

random.randint(0, 1000) / 1000 siempre devuelve milisegundos aleatorios.

¿Cuál es el uso de estos milisegundos aleatorios?

El motivo se explica la documentación de la API :

En el flujo anterior, random_number_milliseconds es un número aleatorio de milisegundos menor o igual a 1000. Esto es necesario para evitar ciertos errores de locking en algunas implementaciones concurrentes. El valor de random_number_milliseconds se debe redefinir después de cada espera.

Esta es una técnica común para “difuminar” la sincronización de los accesos de las API para evitar los problemas causados ​​por caer en patrones recurrentes de adquisición y liberación de locking de recursos.

Tener un poco de aleatoriedad en situaciones como esta es bueno. Por ejemplo, si tiene una gran cantidad de clientes que llegan al mismo servidor, hacer que utilicen el mismo retroceso determinista podría hacer que lleguen al servidor en un locking perfecto, lo que no es deseable.