You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tenacity文档中wait_exponential示例是否存在描述错误?

关于Tenacity中wait_exponential的间隔计算疑问解答

首先得明确Tenacity里wait_exponential的核心逻辑:它是指数增长的等待策略,和multiplier的取值无关,multiplier只是指数计算结果的一个乘数。

它的基础计算公式是:
等待时长 = multiplier * (2 ** 重试次数)
(重试次数从0开始计数)

同时还会受到min和max参数的限制:

  • 如果计算出的时长小于min,就用min的值
  • 如果计算出的时长大于max,就用max的值

回到你贴的示例代码:

@retry(wait=wait_exponential(multiplier=1, min=4, max=10))
def wait_exponential_1():
    print("Wait 2^x * 1 second between each retry starting with 4 seconds, then up to 10 seconds, then 10 seconds afterwards")
    raise Exception

我们来拆解实际的等待间隔:

  • 第1次重试(重试次数0):1*(2^0)=1秒 → 小于设置的min=4,所以取4秒
  • 第2次重试(重试次数1):1*(2^1)=2秒 → 还是小于4,继续取4秒
  • 第3次重试(重试次数2):1*(2^2)=4秒 → 等于min,取4秒
  • 第4次重试(重试次数3):1*(2^3)=8秒 → 介于4和10之间,取8秒
  • 第5次及之后重试:1*(2^4)=16秒 → 大于max=10,所以固定取10秒

你觉得“multiplier为1应该线性增长”是误解了这个参数的作用——线性增长是每次增加固定值(比如每次加1秒),但wait_exponential从设计上就是指数增长模式,multiplier只是用来缩放指数结果的系数,不会改变增长的类型。示例里的说明“2^x *1秒”是指它的基础计算逻辑,只是因为设置了min=4,前几次的实际间隔被抬高到了4秒而已。

内容的提问来源于stack exchange,提问作者Rajib Deb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:22:16