Skip to content Skip to sidebar Skip to footer

Exponential Backoff: Time.sleep With Random.randint(0, 1000) / 1000

In many google api's code samples i have seen this line of code. time.sleep((2 ** n) + (random.randint(0, 1000) / 1000)) random.randint(0, 1000) / 1000 always return random millis

Solution 1:

Having a bit of randomness in situations like this is good. For example, if you have a large number of clients hitting the same server, having them use the same deterministic backoff could result in them hitting the server in perfect lockstep, which isn't desirable.

Solution 2:

The reason is explained the API documentation:

In the above flow, random_number_milliseconds is a random number of milliseconds less than or equal to 1000. This is necessary to avoid certain lock errors in some concurrent implementations. The value of random_number_milliseconds must be redefined after each wait.

This is a common technique to "fuzz" the timing of APIs accesses to avoid thrashing caused by falling into recurring patterns of resource lock acquisition and release.

Post a Comment for "Exponential Backoff: Time.sleep With Random.randint(0, 1000) / 1000"