如何使用固定超时和尝试次数实现指数退避/延迟计算?

时间:2017-03-29 16:13:20

标签: algorithm delay retry-logic exponential-backoff

我见过的大多数退避/延迟算法都有固定的尝试次数或固定超时,但不是两者都有。

我想在T秒内完成M次尝试,它们之间具有指数间距,因此“T =延迟(0)+延迟(1)+ ... +延迟(M-1)”,其中“延迟” (N)=(e ^ N - 1)/ e“(其中N - 重试次数)。

如何在上面的描述中计算“e”值,以便在整体超时T(预先指定M和T)内进行M次尝试?

1 个答案:

答案 0 :(得分:2)

由于“T”是“e”的单调函数,因此您可以执行二进制搜索以找到最适合的值。

这是一个示例Python程序,用于查找给定“T”和“M”的“e”:

def total_time(e, M):
    current = 1
    total = 0
    for i in range(M):
        total += current-1
        current *= e
    return total

def find_best_e(T, M):
    a, b = 0, T
    while abs(a-b) > 1e-6:
        m = (a+b)/2.0
        if total_time(m, M) > T:
            b = m
        else:
            a = m
    return (a+b)/2


e = find_best_e(10, 3)
print([e**n-1 for n in range(3)])