Python 装饰器实例
retry
偶然看到一篇文章,想到了前几天的一个需求,git pull性能不稳,需要加入重试机制,正好这个装饰器的实例符合这样的场景。
# coding:utf-8
import time
import logging
import socket
from functools import wraps
logging.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)
@maketry
def check():
pass
'''
if __name__ == "__main__":
check()
print(check.__name__)
参考:
- CSDN-郭 璞偶遇不错的装饰器:本文主要参考,但是该文示例有点小 bug,进一步优化了一下
- SOF-UnboundLocalError: local variable 'e' referenced before assignment:这个问题解决了上面遇到的 bug ,
try...except的机制,会有一个特殊的作用域的处理,会del e - Python之旅-装饰器:复习了一下带参数装饰器的写法,本文就属于带参数的装饰器的用法
Python 装饰器实例的更多相关文章
- Python的装饰器实例用法小结
这篇文章主要介绍了Python装饰器用法,结合实例形式总结分析了Python常用装饰器的概念.功能.使用方法及相关注意事项 一.装饰器是什么 python的装饰器本质上是一个Python函数,它可以让 ...
- 使用python装饰器计算函数运行时间的实例
使用python装饰器计算函数运行时间的实例 装饰器在python里面有很重要的作用, 如果能够熟练使用,将会大大的提高工作效率 今天就来见识一下 python 装饰器,到底是怎么工作的. 本文主要是 ...
- Python 装饰器(Decorators) 超详细分类实例
Python装饰器分类 Python 装饰器函数: 是指装饰器本身是函数风格的实现; 函数装饰器: 是指被装饰的目标对象是函数;(目标对象); 装饰器类 : 是指装饰器本身是类风格的实现; 类 ...
- Python 装饰器学习
Python装饰器学习(九步入门) 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...
- (转载)Python装饰器学习
转载出处:http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方 ...
- Python装饰器学习
Python装饰器学习(九步入门) 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 ? 1 2 3 4 5 6 7 8 # -*- ...
- python -- 装饰器的高级应用
装饰器和装饰器模式装饰器模式是面向对象的一种设计模式,支持将行为动态增加到已经存在的对象上.当装饰一个对象的时候,就表示独立与其他类实例对象,为该对象扩展了新的功能. python的装饰器不是装饰器模 ...
- Python装饰器模式学习总结
装饰器模式,重点在于装饰.装饰的核心仍旧是被装饰对象. 类比于Java编程的时候的包装模式,是同样的道理.虽然概念上稍有不同但是原理上还是比较相近的.下面我就来谈一谈我对Python的装饰器的学习的一 ...
- Python基础(五) python装饰器使用
这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 # -*- coding:gbk -*- '''示例1: 最简单的函数,表示调用了两次 ...
随机推荐
- Mysql8.0.11安装以及注意事项
一.环境配置 首先在官网下载最新的mysql8.0.11数据库,解压到你需要放置的盘符最好不要有中文,然后新建MYSQL_HOME,参数为mysql解压后安装文件的bin文件路径如我的:变量名:MYS ...
- WebStorage (1) 实例
实例代码 <p>本页面每5秒刷新一下,这是您第<mark></mark>次进入本页面!</p> <script> if (window.lo ...
- jQuery事件--mouseover()、mouseout()、mouseenter()和mouseleave()
mouseover([[data],fn]) 概述 当鼠标指针位于元素上方时,会发生 mouseover 事件.该事件大多数时候会与 mouseout 事件一起使用 注释:与 mouseente ...
- python_super注意事项
class room: def __init__(self,area=120,usedfor='sleep'): self.area = area self.usedfor = usedfor def ...
- 基于Kubernetess集群部署完整示例——Guestbook
目录贴:Kubernetes学习系列 本文依赖环境:Centos7部署Kubernetes集群.基于Kubernetes集群部署skyDNS服务 该示例中,我们将创建一个redis-master.两个 ...
- 【函数封装】javascript判断移动端操作系统为android 或 ios 或 iphoneX
function isPhone(){ var u = navigator.userAgent, app = navigator.appVersion; var isAndroid = u.index ...
- Linux服务器---邮件服务器dovecot
安装dovecot Dovecot是CentOS系统中著名的POP3/IMAP服务器实现.POP3/IMAP是从邮件服务器中读取邮件时使用的协议,POP3将邮件全部从服务器中拖取下来:IMAP则每次从 ...
- AlphaGo设计师黄士杰:“最强的学习技能在人类的脑袋里”
AlphaGo设计师黄士杰:“最强的学习技能在人类的脑袋里” 深度学习和强化学习结合看来才能解决彩票预测的问题 可以这么说,AlphaGo的成功就是深度学习与强化学习的胜利,因为两者结合在一起,建构判 ...
- centos6.8安装DB2 10.5
1.把tar拷贝到/opt下面,用root账户,安装软件包 cd /opt tar -zxvf v9.5fp3b_linuxx64_server.tar.gz (64位) cd server ./db ...
- freemark、jsp&css
**************************************************************freemark相关**************************** ...