指数退避:time.sleep with random.randint(0,1000)/ 1000

Nij*_*nan 21 python

在许多google api的代码示例中,我看到了这行代码.

time.sleep((2 ** n) + (random.randint(0, 1000) / 1000))
Run Code Online (Sandbox Code Playgroud)

random.randint(0, 1000) / 1000 总是返回随机毫秒.

什么是随机毫秒的使用?

NPE*_*NPE 24

在这样的情况下有一点随机性是好的.例如,如果您有大量客户端命中同一台服务器,让它们使用相同的确定性退避可能会导致它们以完美的锁步方式命中服务器,这是不可取的.


Ray*_*ger 6

原因解释了API文档:

在上面的流程中,random_number_milliseconds是小于或等于1000的随机毫秒数.这对于避免某些并发实现中的某些锁定错误是必要的.每次等待后,必须重新定义random_number_milliseconds的值.

这是一种常见的技术,可以"模糊"API访问的时间,以避免因资源锁定获取和释放的重复模式而导致的颠簸.