问题标签 [exponential-backoff]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linear-programming - 使用指数退避有什么好处?
当代码在等待某个延迟时间不确定的条件时,看起来很多人选择使用指数退避,即等待N秒,检查条件是否满足;如果不是,请等待 2N 秒,检查条件等。与检查恒定/线性增加的时间跨度相比,这有什么好处?
javascript - Google JavaScript API:捕捉 HTTP 错误
Abraham对Google Calendar API 的回答:“后端错误”代码 503准确描述了我的情况。在循环创建或删除日历条目的代码时,我在随机位置得到 503。
但是,我不知道如何遵循他从谷歌引用的建议,即捕捉错误并使用指数回退重试交易。
下面的代码是一个循环,它将 8 个新事件放入我的日历中。它随机遇到 503 错误,这些错误是从 Google API 而不是我自己的代码抛出的。很多时候它工作没有错误。
Google API 代码从我的循环中异步运行,因此在我的循环完成之前,Google 的任何操作都不会真正执行。当异步代码抛出 503 时,我的代码周围的try-catch
块不会触发。我不能在没有 a 的情况下将 acatch
放入回调函数try
中,这将缩小catch
排除 Google 代码的范围。
有什么建议么?
java - 为什么我们在重试请求之间应用延迟
当我们有一段代码经常失败并且必须重试时。然后我们使用重试模式。
在重试该请求之前,我们通常会延迟几毫秒。我想知道为什么我们需要一些延迟?如果重试请求没有等待并再次发送请求会发生什么。
java - RxJava 中的指数退避
我有一个 API 可以Observable
触发一个事件。
如果检测到 Internet 连接,我想返回一个Observable
每秒发出一个值的值,如果没有连接则延迟时间。defaultDelay
numberOfFailedAttempts^2
我尝试了很多不同的风格,我遇到的最大问题是retryWhen's
可观察的只评估一次:
有什么办法可以做我想做的事吗?我发现了一个相关的问题(现在找不到它正在搜索),但所采取的方法似乎不适用于动态值。
recursion - 使用递归函数和承诺的退避策略
几乎可以肯定我搞砸了我的承诺,但它就这样,在我的头爆炸之前
我正在尝试在使用 aws dynamodb 进行批处理操作后为我的 UnprocessedItems 实现重试机制。我有一组要写入数据库的批次。
以及实际保存数据的功能:
调用 Promise.all 后的结果数据应该是结果列表:
data = [[r1], [r2], [r3], [r4]]
当 batchWrite 没有任何 UnprocessedItems 时,一切正常。但是当需要重试时,我会准确地为那些在第一次运行中有一些 UnprocessedItems 的批次获取空值:例如,如果批次 2 和 3 导致一些 UnprocessedItems 则 promise.all 以data = [[r1], null, null, [r4]]
我想我在使用递归时错误地处理了 Promise 调用,但我还想不通。
java - RX Java - 重试一些引发异常的代码
我正在尝试使用 RX Java 来使用来自不断发送对象的源的一些数据。
我想知道如何针对我自己的代码引发异常的情况实施重试策略。例如,网络异常应触发具有指数退避策略的重试。
一些代码:
processMessage(message)
是包含可能失败的风险代码的方法,它是我想要重试的代码部分,但我不想阻止可观察者使用源中的数据。
对此有什么想法吗?
algorithm - 如何使用固定超时和尝试次数实现指数退避/延迟计算?
我见过的大多数退避/延迟算法都有固定的尝试次数或固定的超时,但不是两者兼而有之。
我想在 T 秒内准确地进行 M 次尝试,它们之间具有指数间隔,因此“T = delay(0) + delay(1) + ... + delay(M-1)”,其中“delay(N) = (e^N - 1) / e"(其中 N - 重试次数)。
如何计算上述描述中的“e”值,以便在整个超时 T 内进行准确的 M 次尝试(预先指定 M 和 T)?
firebase - FCM:重试后和指数退避
据我了解,当消息无法传递时,Retry-After 标头有时包含在响应中,有时不包含。但是,如果我首先收到包含 Retry-After 的错误响应,然后重新发送消息并收到另一个错误响应但没有 Retry-After,会发生什么?我知道我应该使用指数退避,但是当之前的等待时间来自 Retry-After 标头时,它是如何工作的?
想象一下这个请求和响应序列:
在发送请求 4 之前我应该等待多长时间?8 秒?还是从 2 秒开始?
java - 如何为 Google Gmail API 实现指数退避?
我目前正在使用 Gmail API 代表用户发送电子邮件。邮件是一一发送的,收件人的平均大小是 500。我经常看到{
"code" : 500,
"errors" : [ {
"domain" : "global",
"message" : "Backend Error",
"reason" : "backendError"
} ],
"message" : "Backend Error"
}
以及一些发生的
{
"code" : 429,
"errors" : [ {
"domain" : "usageLimits",
"message" : "Rate Limit Exceeded",
"reason" : "rateLimitExceeded"
} ],
"message" : "Rate Limit Exceeded"
}
谷歌建议实施指数退避策略来解决这些错误。我已经实现了下面的解决方案,但它似乎不起作用并且对这些错误没有帮助。这是我的实现;
这个实现有什么问题?我是否正确实现了自定义 HttpRequestInitializer。 我可以在哪里设置日志语句以了解是否根据指数策略重试请求?
请建议
python - python中的指数退避实现
我有两个列表“开始”和“结束”。它们的长度相同(每个 400 万):
我的问题是我想迭代这两个列表,从同一点开始,但是沿着“结束列表”逐步迭代,直到找到一个值,其中“开始 [i]”和“结束 [i+x”之间的差异]' 大于 1000。
我已尽最大努力做到这一点,我使用无限循环迭代“结束列表”,直到与 start 的差异超过 1000,然后从该点开始并从那里执行相同的操作......
注意:旧内容省略
最终我正在寻找的输出是(以上面的说明图为例):
谁能帮我这个?
更新
虽然这个问题的先前答案确实有效:
恐怕代码非常慢,因为我正在更新“i_e”的扩展名,方法是在内部 while 循环的每次迭代中添加 1...为了解决这个问题,我想创建一个将扩展的“计数器”变量'i_e' 变量动态。这将通过递归来完成,其中 i_e 变量将呈指数增加,直到达到所需距离的一半,然后将呈指数减少,直到达到所需距离。
战略说明
我的尝试如下:
我创建了一个递归函数来更新变量“计数器”
在原始代码中调用函数:
我收到以下错误:
(印刷数千次)
我对这种问题没有经验,并且不确定我是否正确地接近它......有人可以帮忙吗?