python重试装饰器示例


Posted in Python onFebruary 11, 2014

利用python 写一些网络服务的时候,当网络状况不好,或者资源占用过多,任务拥塞的情况下,总会抛出一些异常,当前任务就被终止了,可以很好的利用@装饰器,写一个重试的装饰器,这样比较python!
执行结果:

WARNING:root:timed out, Retrying in 3 seconds...
WARNING:root:timed out, Retrying in 6 seconds...
WARNING:root:timed out, Retrying in 12 seconds...
#!/usr/bin/env python
# -*- coding: utf-8 -*- 
#  tanyewei@gmail.com
#  2014/01/27 10:36
import time
import logging
import socket
from functools import wraps
logging.basicConfig(level=logging.DEBUG)
def retry(MyException, tries=4, delay=3, backoff=2, logger=None):
    def deco_retry(f):
        @wraps(f)
        def f_retry(*args, **kwargs):
            mtries, mdelay = tries, delay
            while mtries > 1:
                try:
                    return f(*args, **kwargs)
                except MyException as ex:
                    msg = "%s, Retrying in %d seconds..." % (str(ex), mdelay)
                    if logger:
                        logger.warning(msg)
                    else:
                        print msg
                    time.sleep(mdelay)
                    mtries -= 1
                    mdelay *= backoff
            return str(ex)
        return f_retry
    return deco_retry
@retry(Exception, logger=logging)
def check():
    sk = socket.socket()
    sk.settimeout(5)
    sk.connect(('6.6.6.6', 80))
if __name__ == "__main__":
    check()
Python 相关文章推荐
python获取当前计算机cpu数量的方法
Apr 18 Python
详解在Python程序中使用Cookie的教程
Apr 30 Python
使用Python导出Excel图表以及导出为图片的方法
Nov 07 Python
python 2.7.13 安装配置方法图文教程
Sep 18 Python
pyqt5中QThread在使用时出现重复emit的实例
Jun 21 Python
PyCharm-错误-找不到指定文件python.exe的解决方法
Jul 01 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
Aug 05 Python
python爬虫selenium和phantomJs使用方法解析
Aug 08 Python
如何更改 pandas dataframe 中两列的位置
Dec 27 Python
浅析python 字典嵌套
Sep 29 Python
python中_del_还原数据的方法
Dec 09 Python
python playwright 自动等待和断言详解
Nov 27 Python
python网络爬虫采集联想词示例
Feb 11 #Python
python基础教程之实现石头剪刀布游戏示例
Feb 11 #Python
python使用递归解决全排列数字示例
Feb 11 #Python
python基础教程之popen函数操作其它程序的输入和输出示例
Feb 10 #Python
python基础教程之python消息摘要算法使用示例
Feb 10 #Python
go和python调用其它程序并得到程序输出
Feb 10 #Python
python实现socket端口重定向示例
Feb 10 #Python
You might like
Zend Studio 无法启动的问题解决方法
2008/12/04 PHP
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
jQuery EasyUI中对表格进行编辑的实现代码
2010/06/10 Javascript
使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
2014/05/27 Javascript
jQuery功能函数详解
2015/02/01 Javascript
js获得当前系统日期时间的方法
2015/05/06 Javascript
JavaScript检测字符串中是否含有html标签实现方法
2015/07/01 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
2015/07/18 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
2015/07/27 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
input框中的name和id的区别
2016/11/16 Javascript
JS判断非空至少输入两个字符的简单实现方法
2017/06/23 Javascript
JavaScript事件处理程序详解
2017/09/19 Javascript
浅谈bootstrap layer.open中end的使用方法
2019/09/12 Javascript
详解Vue中的Props与Data细微差别
2020/03/02 Javascript
详细分析Node.js 模块系统
2020/06/28 Javascript
Js利用正则表达式去除字符串的中括号
2020/11/23 Javascript
Python类属性与实例属性用法分析
2015/05/09 Python
浅谈Python中chr、unichr、ord字符函数之间的对比
2016/06/16 Python
简单谈谈Python流程控制语句
2016/12/04 Python
Python绑定方法与非绑定方法详解
2017/08/18 Python
python 实现查找文件并输出满足某一条件的数据项方法
2019/06/12 Python
Python+OpenCV实现将图像转换为二进制格式
2020/01/09 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
Python实现UDP程序通信过程图解
2020/05/15 Python
Python QT组件库qtwidgets的使用
2020/11/02 Python
Python绘制词云图之可视化神器pyecharts的方法
2021/02/23 Python
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
联想印度官方网上商店:Lenovo India
2019/08/24 全球购物
党日活动总结
2014/05/07 职场文书
大学毕业生求职自荐书
2014/06/05 职场文书
党的群众路线教育实践活动党员个人剖析材料
2014/10/08 职场文书
小学教师个人工作总结2015
2015/04/20 职场文书
600字作文之感受大自然
2019/11/27 职场文书
CSS巧用渐变实现高级感背景光动画
2021/12/06 HTML / CSS