首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python重试装饰器(Python function retry decorator)

python重试装饰器(Python function retry decorator)

作者头像
py3study
发布于 2020-03-12 12:28:01
发布于 2020-03-12 12:28:01
5.2K00
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

python重试装饰器(Python function retry decorator)

在用requests请求接口或者html的时候,很容易出现超时,限制等各种原因。

在对源代码不进行修改的情况下,可以用装饰器来进行重试

任何函数: 成功,返回-结果,失败,返回--False 都可以用这个装饰器进行重试

1.不需要传参的装饰器写法:

max_retry 为默认重试的次数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import requests


def retry(func):
    def inner(*args, **kwargs):
        ret = func(*args, **kwargs)
        max_retry = 3
        number = 0
        if not ret:
            while number < max_retry:
                number += 1
                print("尝试第:{}次".format(number))
                result = func(*args, **kwargs)
                if result:
                    break
    return inner


@retry
def get_reponse():
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
    }
    url = 'https://www.baidu.com'
    try:
        r = requests.get(url=url, headers=headers, timeout=0.01)
        if r.status_code == 200:
            print(r.headers)
            return r.headers
    except requests.exceptions.ReadTimeout:
        return False
    except requests.exceptions.ConnectTimeout:
        return False
    except Exception:
        return False

get_reponse()

执行结果:

尝试第:1次

尝试第:2次

尝试第:3次

2.需要传参的装饰器写法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def retry(*args, **kwargs):
    def warpp(func):
        def inner():
            ret = func()
            max_retry = kwargs.get('max_retry')
            # 不传默认重试3if not max_retry:
                max_retry = 3
            number = 0
            if not ret:
                while number < max_retry:
                    number += 1
                    print("尝试第:{}次".format(number))
                    result = func()
                    if result:
                        break
        return inner
    return warpp


@retry(max_retry=5)  # 不传默认为3次  @retry() 括号需要带
def get_reponse():
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
    }
    url = 'https://www.baidu.com'
    try:
        r = requests.get(url=url, headers=headers, timeout=0.01)
        if r.status_code == 200:
            print(r.headers)
            return r.headers
    except requests.exceptions.ReadTimeout:
        return False
    except requests.exceptions.ConnectTimeout:
        return False
    except Exception:
        return False

get_reponse()

执行结果:

尝试第:1次

尝试第:2次

尝试第:3次

尝试第:4次

尝试第:5次

3. 装饰器在类的用法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import requests

class Test:
    def retry(*args, **kwargs):
        def warpp(func):
            def inner(self, *args, **kwargs):
                ret = func(self, *args, **kwargs)
                max_retry = kwargs.get('max_retry')
                # 不传默认重试3if not max_retry:
                    max_retry = 3
                number = 0
                if not ret:
                    while number < max_retry:
                        number += 1
                        print("尝试第:{}次".format(number))
                        result = func(self, *args, **kwargs)
                        if result:
                            break
            return inner
        return warpp

    @retry()
    def get_reponse(self, url):
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
        }
        try:
            r = requests.get(url=url, headers=headers, timeout=0.01)
            if r.status_code == 200:
                print(r.headers)
                return r.headers
        except requests.exceptions.ReadTimeout:
            return False
        except requests.exceptions.ConnectTimeout:
            return False
        except Exception:
            return False


if __name__ == '__main__':
    st = Test()
    url = 'https://www.baidu.com'
    st.get_reponse(url)

运行结果:

尝试第:1次

尝试第:2次

尝试第:3次

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
突发!中芯国际、大疆等60家企业正式被特朗普政府列入实体清单
---- 新智元报道   来源:外媒 编辑:LQ 【新智元导读】美国商务部在12月18日发布了新的「贸易黑名单」,新增77家实体,其中包含中国60家企业,中芯国际、大疆创新、深圳光启集团等企业和多家高校被列入清单。 美国商务部工业与安全局(BIS)修订了《出口管理条例》(EAR),加入了77家「实体」,其中中国就有60家。 中芯国际、大疆创新、深圳光启集团等企业和多家高校被列入清单. 中芯国际「动荡的一周」 过去一周对于中芯国际来说真的不太平。 中芯国际高层换帅风波还未平息,现在又被川普政府列入黑名
新智元
2023/05/22
2.1K0
突发!中芯国际、大疆等60家企业正式被特朗普政府列入实体清单
全球EDA巨头新思科技遭美国泄密调查,华为与中芯国际躺枪
---- 新智元报道   编辑:时光 snailnj 【新智元导读】全球最大的半导体设计软件供应商新思科技被调查,涉嫌对华提供关键技术? 又被调查! 全球最大的半导体设计软件供应商(EDA)Synopsys新思科技,以涉嫌对华提供关键技术,正在接受美国商务部调查。 Synopsys,即新思科技,创立于1986年,总部位于美国加利福尼亚州,主要提供电子设计自动化软件和知识产权服务。 涉嫌提供关键技术? 知情人士称,新思科技正在接受美国商务部的调查,原因可能是向被禁的中国公司提供了关键技术。
新智元
2022/04/15
8520
全球EDA巨头新思科技遭美国泄密调查,华为与中芯国际躺枪
中芯国际遭特朗普政府出口管制,未进实体清单,但美设备商供货要先申请许可
据路透社报道,美国商务部在给中芯国际供应商的一封信中要求,在向中芯国际出口敏感技术、设备前,必须先申请出口许可证。
量子位
2020/09/30
4380
中芯国际遭特朗普政府出口管制,未进实体清单,但美设备商供货要先申请许可
中芯国际“跌”上热搜:回应或被美国列入“实体清单”的声明招致不满?
9 月 5 日,据路透社援引美国国防部一名官员消息称,特朗普政府正考虑是否将中国顶级芯片制造商中芯国际 (SMIC) 列入“贸易黑名单”。晚些时候,中芯国际对此做出回应:任何关于“中芯国际涉军”的报道均为不实新闻,其对此感到震惊和不解。
深度学习与Python
2020/09/14
5760
长江存储、寒武纪等36家企业被列入美「实体清单」,自研芯片顶得住么?
一觉醒来,美国贸易大棒又朝着36家中国科技公司和科研机构砸了下来,美商务部工业和安全局将出口管制的「实体清单」再次扩大。
新智元
2023/01/09
1.1K0
长江存储、寒武纪等36家企业被列入美「实体清单」,自研芯片顶得住么?
Docker 加入禁止名单了!被列入美国“实体名单”的国家、企业、高校、个人不能使用了!以后国内开发者用什么?
https://www.docker.com/legal/docker-terms-service
开发者技术前线
2020/11/24
2.7K0
Docker 加入禁止名单了!被列入美国“实体名单”的国家、企业、高校、个人不能使用了!以后国内开发者用什么?
突发!美国将7家中国实体列入“实体清单”,航空航天领域成打击重点!
当地时间8月23日,美国商务部以国家安全和外交政策问题为由,将7家中国实体纳入出口管制的“实体清单”(Entity List),这些实体均与航空航天有关。
芯智讯
2022/08/25
1.2K0
突发!美国将7家中国实体列入“实体清单”,航空航天领域成打击重点!
新思科技又被调查!疑规避美国制裁继续向中企提供关键技术
---- 新智元报道   编辑:时光 【新智元导读】中国企业规避美国制裁?新思科技继续向中企提供关键技术?美正联合更多「盟友」如印度,以孤立中国。 综合路透社、彭博社等多家媒体报道,近日,美国商务部正在对中国公司「规避制裁」展开调查。 美方称,美国政府正尝试获取有关中国「不良行为者」的信息,并考虑将更多企业列入「黑名单」。 而且,美方认为,中国企业仍在想方设法规避制裁,包括设立新公司等。 美国制裁中国之举,不但从未停歇,反而变本加厉! 就在前天,美国商务部长吉娜·雷蒙多(Gina Raimondo)
新智元
2022/06/02
5030
新思科技又被调查!疑规避美国制裁继续向中企提供关键技术
存在军事用途,美国政府对中芯国际实施出口限制?中芯国际:未收到官方消息
上周五,《华尔街日报》援引商务部致计算机芯片公司的一封信中提出的要求报道,信中指出,出口到中芯国际或其子公司有被中国政府用于军事活动的风险,因此在将某些技术出口给中芯国际之前,它们必须获得许可证。
大数据文摘
2020/10/10
5050
存在军事用途,美国政府对中芯国际实施出口限制?中芯国际:未收到官方消息
美国又「拉黑」大疆等8家中国公司,中芯国际恐遭更严厉制裁!
英国金融时报援引知情人士称,美国当地时间周四,拜登政府将把8家中国公司列入一份投资黑名单。
新智元
2021/12/21
9030
美国又「拉黑」大疆等8家中国公司,中芯国际恐遭更严厉制裁!
14nm及以下都禁:外媒称美国将加大对中芯国际制造技术的限制
机器之心报道 机器之心编辑部 美国商务部试图收紧对中芯国际的出口控制。 据路透社报道,拜登政府正在考虑对向中国出口芯片制造工具增加新的针对性限制,试图在不减缓芯片流入全球市场速度的前提下,阻碍中国最大芯片制造商中芯国际的发展。 路透社援引五位知情人士的报道称,美国商务部正在研究禁止向中国公司出口芯片制造工具的可能性,即使用 14 nm 制造节点和其他制造节点制造逻辑芯片 。目前,中国唯一一家使用其 14nm 制造工艺生产芯片的公司是中芯国际,该公司在 2019 年底实现了 14nm 级芯片的量产。 与此同
机器之心
2022/07/12
9080
14nm及以下都禁:外媒称美国将加大对中芯国际制造技术的限制
一纸禁令突袭这家即将上市的公司:美国分公司的技术,不能传送回中国总部
美国商务部要求一家生于中国、长于中国,打算赴美上市的中国公司,却不能把技术“出口”中国。
量子位
2020/03/10
6690
一纸禁令突袭这家即将上市的公司:美国分公司的技术,不能传送回中国总部
突发!7个中国超级计算机实体被美国列入清单,或与E级超算有关?
美国商务部周四表示,正将7家中国超算实体列入美国经济黑名单,实施出口管制,理由是声称其从事的活动「违反美国国家安全或外交政策利益」( for conducting activities that are contrary to the national security or foreign policy interests of the United States.)。
新智元
2021/04/14
1.4K0
开源软件脱险!Linux硬核回应美实体清单:已开源软件属于全人类,不受制于EAR
随着中美关系日益紧张,技术圈也受到波及,前两周,国商务部将哈工大、北航等33家机构纳入实体清单,也就是说,凡是在实体清单以内的公司以及机构,如果没有获得美国政府的具体批准,将无法使用含有美国技术的产品,之后,Matlab已经被禁止在这些高校使用了。
大数据文摘
2020/07/14
1.3K0
开源软件脱险!Linux硬核回应美实体清单:已开源软件属于全人类,不受制于EAR
突发!拜登扩大投资禁令,华为、中芯等59家中企列入「黑名单」
---- 新智元报道   来源:外媒 编辑:yaxin, LQ 【新智元导读】当地时间周四,拜登政府签署了一份新的行政令,限制美国实体对列入投资「黑名单」的中企进行投资交易,其中包括华为、中芯、海康威视等59家企业。该禁令将于8月2日生效,投资者需要在未来一年内抛售已经持有的相关股票。 6月3日,拜登政府签署了一项新行政令,将包括华为、中芯等59家中企列入投资「黑名单」,禁止美国实体与名单所列公司进行投资交易。 美国财政部取代国防部,负责执行这份禁令清单。最新行政令将于8月2日生效,此前将有60天宽限
新智元
2023/05/22
1.1K0
突发!拜登扩大投资禁令,华为、中芯等59家中企列入「黑名单」
中芯国际股价受到打击
中芯国际在香港的股价接近7%,而在上海上市的股票则下跌超过6%,自8月初以来,中芯国际股价已跌至40%。
海大指南针
2022/05/16
2640
中芯国际股价受到打击
华为和中芯国际获美国供货许可证:分别价值 610 亿美元、420 亿美元
路透社周四看到的几份文件显示,从去年11月到今年4月,华为和中芯国际的供应商获得价值数千亿美元的许可证,可以向这两大巨头出售产品和技术,尽管它们被列入了美国贸易黑名单。 据文件显示,113份价值总计610亿美元的出口许可证已获批准,供应商因此可以向华为运送产品。另外188份价值近420亿美元的许可证已获批准,向中芯国际开了绿灯。 数据还显示,10份许可证申请中超过9份被授予了中芯国际的供应商,而同期向华为供货的申请中 69%获得了批准。 美国众议院外交事务委员会周四投票批准了其级别最高的共和党议员Micha
云头条
2022/03/18
2810
华为回应:限制华为只能让美国5G更落后
据环球网报道,美国当地时间15日,特朗普签署行政命令,要求美国进入紧急状态,在此紧急状态下,美国企业不得使用对国家安全构成风险的企业所生产的电信设备。
新智元
2019/05/17
4970
突发!拜登签署《安全设备法》,全面禁止华为、中兴设备进入美国
本周四,美国总统拜登签署立法,防止华为技术有限公司、中兴通讯股份有限公司等被视为安全威胁的公司从美国监管机构获得新的设备许可证。
新智元
2021/11/15
8850
突发!拜登签署《安全设备法》,全面禁止华为、中兴设备进入美国
禁止与华为讨论技术标准?高通、英特尔3GPP上限制员工交流
据路透社报道,由于美国近期针对中国科技公司的黑名单事件,全球一些最大的科技公司正要求其员工不得私下与华为员工讨论技术和技术标准的相关问题。
机器之心
2019/06/14
4520
禁止与华为讨论技术标准?高通、英特尔3GPP上限制员工交流
推荐阅读
突发!中芯国际、大疆等60家企业正式被特朗普政府列入实体清单
2.1K0
全球EDA巨头新思科技遭美国泄密调查,华为与中芯国际躺枪
8520
中芯国际遭特朗普政府出口管制,未进实体清单,但美设备商供货要先申请许可
4380
中芯国际“跌”上热搜:回应或被美国列入“实体清单”的声明招致不满?
5760
长江存储、寒武纪等36家企业被列入美「实体清单」,自研芯片顶得住么?
1.1K0
Docker 加入禁止名单了!被列入美国“实体名单”的国家、企业、高校、个人不能使用了!以后国内开发者用什么?
2.7K0
突发!美国将7家中国实体列入“实体清单”,航空航天领域成打击重点!
1.2K0
新思科技又被调查!疑规避美国制裁继续向中企提供关键技术
5030
存在军事用途,美国政府对中芯国际实施出口限制?中芯国际:未收到官方消息
5050
美国又「拉黑」大疆等8家中国公司,中芯国际恐遭更严厉制裁!
9030
14nm及以下都禁:外媒称美国将加大对中芯国际制造技术的限制
9080
一纸禁令突袭这家即将上市的公司:美国分公司的技术,不能传送回中国总部
6690
突发!7个中国超级计算机实体被美国列入清单,或与E级超算有关?
1.4K0
开源软件脱险!Linux硬核回应美实体清单:已开源软件属于全人类,不受制于EAR
1.3K0
突发!拜登扩大投资禁令,华为、中芯等59家中企列入「黑名单」
1.1K0
中芯国际股价受到打击
2640
华为和中芯国际获美国供货许可证:分别价值 610 亿美元、420 亿美元
2810
华为回应:限制华为只能让美国5G更落后
4970
突发!拜登签署《安全设备法》,全面禁止华为、中兴设备进入美国
8850
禁止与华为讨论技术标准?高通、英特尔3GPP上限制员工交流
4520
相关推荐
突发!中芯国际、大疆等60家企业正式被特朗普政府列入实体清单
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验