我想在python请求库中添加重试机制,因此正在使用它的脚本将重试非致命错误。

目前,我确实认为三种错误是可以恢复的:

  • HTTP返回码502、503、504
  • 找不到
  • 主机(现在不重要了)
  • 请求超时

  • 在第一阶段,我想每分钟重试指定的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/

    10-12 18:24
    查看更多