美文网首页
python使用retrying重试请求

python使用retrying重试请求

作者: 闲睡猫 | 来源:发表于2019-08-23 19:25 被阅读0次

    当我们用 request 发起网络请求,时不时会遇到超时,当然不可能让这个请求一直阻塞,一般会设置一个超时时间,用 try except 抛出异常,避免程序中断。可如果一次超时就放弃该请求,误杀的概率会很大,我们日常访问某网站时,有打不开的情况都会多刷新几次。因此,我们也需要让 python 进行重试。而 retrying 模块应运而生

    retrying 的安装很简单,用 pip 一键安装:

    pip install retrying
    

    为了表现 retrying 的重试功能,我们故意请求一个不规范的链接,如 www.baidu.com ,由于没有带 http 协议,request 会报错,从而触发 retrying 重试

    代码如下:

    import requests
    from retrying import retry
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"
    }
    
    @retry(stop_max_attempt_number=3) # 表示重试以下代码三次
    def _parse_url(url):
        print("-" * 30)
        response = requests.get(url, headers=headers, timeout=3)
        assert response.status_code == 200
        return response.content.decode()
    
    
    def parse_url(url):
        try:
            html_str = _parse_url(url)
        except:
            html_str = None
        return html_str
    
    
    if __name__ == "__main__":
        url = 'www.baidu.com'
        print(parse_url(url))
    

    结果如下:

    ------------------------------
    ------------------------------
    ------------------------------
    None
    

    说明,retry 在遇到异常后会重试运行,直到给定的最大重试次数

    题图

    相关文章

      网友评论

          本文标题:python使用retrying重试请求

          本文链接:https://www.haomeiwen.com/subject/jffxectx.html