我想知道是否有一个共同模式重试请求一定次数(由于服务器错误或网络不良可能会失败)。我想出了这个,我愿意在那里找到更好的实现。
cnt=0
while cnt < 3:
try:
response = requests.get(uri)
if response.status_code == requests.codes.ok:
return json.loads(response.text)
except requests.exceptions.RequestException:
continue
cnt += 1
return False
答案 0 :(得分:4)
您可能需要考虑在重试之间引入等待,因为很多瞬态问题可能需要几秒钟才能清除。另外,我建议等待时间几何增加,以便有足够的时间让系统恢复:
import time
cnt=0
max_retry=3
while cnt < max_retry:
try:
response = requests.get(uri)
if response.status_code == requests.codes.ok:
return json.loads(response.text)
else:
# Raise a custom exception
except requests.exceptions.RequestException as e:
time.sleep(2**cnt)
cnt += 1
if cnt >= max_retry:
raise e
在这种情况下,您的重试将在1秒,2秒和4秒后发生。请注意最大重试次数。你将重试次数增加到10,接下来就知道代码将等待17分钟。
修改强>
仔细研究一下你的代码,当你用尽重试时返回false
真的没有意义。您应该真正向调用者提出异常,以便可以传达问题。另外,您检查requests.codes.ok
但没有else
操作定义。