前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python使用retrying重试请求

python使用retrying重试请求

作者头像
章鱼喵
发布2019-08-24 18:40:45
1.2K0
发布2019-08-24 18:40:45
举报
文章被收录于专栏:coding

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

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

代码语言:javascript
复制
pip install retrying

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

代码如下:

代码语言:javascript
复制
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))

结果如下:

代码语言:javascript
复制
------------------------------
------------------------------
------------------------------
None

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

题图

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.08.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档