我想在python请求库中添加重试机制,因此正在使用它的脚本将重试非致命错误。
目前,我确实认为三种错误是可以恢复的:
在第一阶段,我想每分钟重试指定的5xx请求。
我希望能够透明地添加此功能,而不必为从这些使用python-requests的脚本或库中进行的每个HTTP调用手动实现恢复。
最佳答案
此代码段将使来自同一 session 的所有HTTP请求总共重试5次,并在重试之间进入睡眠状态,并增加0、2、4、8、16s的退避(第一个重试立即完成)。它将重试基本连接问题(包括DNS查找失败)以及HTTP状态代码502、503和504。
import logging
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
logging.basicConfig(level=logging.DEBUG)
s = requests.Session()
retries = Retry(total=5, backoff_factor=1, status_forcelist=[ 502, 503, 504 ])
s.mount('http://', HTTPAdapter(max_retries=retries))
s.get("http://httpstat.us/503")
有关详细信息,请参见Retry class。关于python - 如何在python请求库中实现重试机制?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23267409/