博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 装饰器实例
阅读量:7129 次
发布时间:2019-06-28

本文共 1198 字,大约阅读时间需要 3 分钟。

retry

偶然看到一篇文章,想到了前几天的一个需求,git pull性能不稳,需要加入重试机制,正好这个装饰器的实例符合这样的场景。

# coding:utf-8import timeimport loggingimport socketfrom functools import wrapslogging.basicConfig(level=logging.DEBUG)def retry(retries=3, delay=1):    def wrapper(func):        @wraps(func)        def proxy(*args, **kwargs):            count = retries            error = None            while count > 0:                try:                    return func(*args, **kwargs)                except Exception as e:                    print("relay times: {}".format(count))                    count -= 1                    time.sleep(delay)                    error = e            print(u"have retry {} times, but happen error: {}".format(count, error))            return error        return proxy    return wrapper@retry(2, 3)def check():    sk = socket.socket()    sk.settimeout(5)    sk.connect(('x.x.x.x', 80))    '''# 上面写法属于简写方式,等价于下面的处理maketry=retry(2,3)@maketrydef check():    pass'''if __name__ == "__main__":    check()    print(check.__name__)

参考:

  • :本文主要参考,但是该文示例有点小 bug,进一步优化了一下
  • :这个问题解决了上面遇到的 bug ,try...except的机制,会有一个特殊的作用域的处理,会del e
  • :复习了一下带参数装饰器的写法,本文就属于带参数的装饰器的用法

转载于:https://www.cnblogs.com/michael-xiang/p/10466814.html

你可能感兴趣的文章
TFS配置(二)
查看>>
GeoServer地图开发解决方案(五):基于Silverlight技术的地图客户端实现
查看>>
Android应用程序键盘(Keyboard)消息处理机制分析(3)
查看>>
Linux上连接Microsoft SQL Server 2005
查看>>
私有云管理-Windows Azure Pack
查看>>
Linux下文件和目录的颜色代表的含义
查看>>
Forefront Client Security服务器部署
查看>>
Crystal Reports中的字段
查看>>
一个例子探究jQuery的Ajax应用(二)
查看>>
PPT of "SharePoint 2007 网站性能优化"
查看>>
爪哇国新游记之三十四----Dom4j的XPath操作
查看>>
node17
查看>>
Java程序性能优化4
查看>>
第一次负责项目总结
查看>>
Azure Redis Cache (2) 创建和使用Azure Redis Cache
查看>>
python统计ES存储空间占用的代码
查看>>
成就连自己都惊讶的未来
查看>>
依赖倒置(DIP)与依赖注入(DI)
查看>>
mysql数据库授权
查看>>
Microstation
查看>>