【问题标题】:Exponential backoff: time.sleep with random.randint(0, 1000) / 1000指数退避:time.sleep with random.randint(0, 1000) / 1000
【发布时间】:2014-12-12 06:44:51
【问题描述】:

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

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

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

这个随机毫秒有什么用?

【问题讨论】:

  • 在 Python 2 中,(random.randint(0, 1000) / 1000)) 将始终返回 0(整数除法返回整数)。另外,就个人而言,我会限制指数退避,否则您的一些客户可能会等待很长时间。我会使用: min(64, (2 ** n)) + (random.randint(0, 1000) / 1000.0)

标签: python


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    原因解释API documentation

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

    这是一种“模糊”API 访问时间的常用技术,以避免因陷入资源锁获取和释放的重复模式而导致抖动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-11
      • 2018-12-11
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      • 1970-01-01
      • 2017-03-30
      相关资源
      最近更新 更多