前记
最近在做监控 Spring Boot /actuator/health
的时候,总是会出现一些莫名其妙的网络超时中断,于是想到了用重试机制来进行重试请求。
下面看看 Python
的第三方库 Tenacity
安装
使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import requests from tenacity import retry, stop_after_attempt, wait_fixed
@retry(reraise=True, stop=stop_after_attempt(2), wait=wait_fixed(2)) def main(): print("Start Try " + str(main.retry.statistics["attempt_number"])) resp = requests.get("https://httpstat.us/200?sleep=5000", timeout=3) print(resp.status_code)
try: main() except Exception as e: print(str(e))
|
输出:
1 2 3
| Start Try 1 Start Try 2 HTTPSConnectionPool(host='httpstat.us', port=443): Read timed out. (read timeout=3)
|
上面示例中,设定超时为 3s
请求却 sleep=5000
此请求必然会超时
tenacity
只要遇见 raise
就会触发重试,上面代码中 requests
底层已经 raise
,所以即使 main
函数中没有 raise
依然会重试
参考文档