在Python中对requests.Session进行重试
如果我在使用requests的 Session 对象,应该如何更合适地对API请求进行重试(最好能有退避策略,例如指数退避)?
def authenticate_api():
session = requests.Session()
session.auth = HTTPBasicAuth("", "")
session.headers = {
"Accept": "application/json",
"Content-Type": "application/json",
}
return session
session = authenticate_api()
# retry this if it fails
response = session.get(URL)
我考虑过下面这样的一种实现,并做了一些修改(也就是一个在成功时就会终止的循环)。不过我不确定这是否真的算是一种好的做法。
for _ in range(3):
try:
response = session.get(URL, timeout = 10)
response.raise_for_status()
break
except Exception:
continue
解决方案
你要找的是 uv add tenacity(或 pip install tenacity)。
引自 文档:
在对分布式服务和其他远程端点进行重试时,指数退避几乎无可比拟。
py @retry(wait=wait_exponential(multiplier=1, min=4, max=10)) def wait_exponential_1(): print("Wait 2^x * 1 second between each retry starting with 4 seconds, then up to 10 seconds, then 10 seconds afterwards") raise Exception
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。