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

时间:2014-12-12 06:44:52

标签: python

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

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

random.randint(0, 1000) / 1000始终返回随机毫秒数。

什么是使用这个随机的毫秒?

2 个答案:

答案 0 :(得分:22)

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

答案 1 :(得分:7)

原因解释为API documentation

  

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

这是" fuzz"的常用技巧。 API访问的时间,以避免因资源锁定获取和释放的重复模式而导致的颠簸。