当 urllib2.request
超时时,将引发 urllib2.URLError
异常。重试建立连接的 pythonic 方法是什么?
原文由 iTayb 发布,翻译遵循 CC BY-SA 4.0 许可协议
有一些图书馆专门从事这方面的工作。
一种是 backoff ,其设计具有特别的功能敏感性。装饰器通过任意可调用对象返回生成器,生成连续的延迟值。最大重试时间为 32 秒的简单指数退避可以定义为:
@backoff.on_exception(backoff.expo,
urllib2.URLError,
max_value=32)
def url_open(url):
return urllib2.urlopen("http://example.com")
另一个是 重试,它具有非常相似的功能,但 API 中的重试参数是通过预定义的关键字参数指定的。
原文由 bgreen-litl 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答834 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
我会使用 重试 装饰器。还有其他的,但是这个效果很好。以下是您可以如何使用它:
如果引发
URLError
,这将重试该函数。查看上面的链接以获取有关参数的文档,但基本上它最多会重试 4 次,每次都会以指数退避延迟加倍,例如 3 秒、6 秒、12 秒。