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"