python
有一个非常有意思包retrying
,可以用来自动化的进行重试操作,支持的条件也比较多,基本上能满足我的日常需求。
在没有用retrying
之前,我的代码结构是这样的:
try_times = 2
response = None
while True:
try:
response = request.post(URL)
except Exception as e:
if try_times > 0:
time.sleep(3)
try_times -= 1
else:
logger.info(response.json())
if response.json()['errno'] == 1000:
raise TimeoutError
raise Exception("failed")
代码可以说是非常的不优雅。retrying
支持使用装饰器来对函数单元进行处理。改造后为
from retrying import retry
def retry_TimeoutError(exception):
return isinstance(exception, TimeoutError)
@retry(stop_max_attempt_number=3,
wait_fixed=3000,
retry_on_exception=retry_TimeoutError)
def retry_request_translate(self, content, input_len):
try:
response = requests.post(url, json=payload)
return result
except Exception as e:
if response is not None:
if response.json()['errno'] == 1000:
raise TimeoutError
raise Exception("failed")
retry
的参数支持:
-
stop_max_attempt_number:
最大重试次数; -
wait_fixed:
重试之间的间隔时间,单位为毫秒; -
retry_on_exception:
捕获特定异常才重试,例如我这里自己申明了超时的判断; -
其它: