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绘制人人网好友关系图示例
Apr 01 Python
python使用nntp读取新闻组内容的方法
May 08 Python
Python中字典映射类型的学习教程
Aug 20 Python
Django自定义用户认证示例详解
Mar 14 Python
树莓派3 搭建 django 服务器的实例
Aug 29 Python
Python any()函数的使用方法
Oct 28 Python
使用python写一个自动浏览文章的脚本实例
Dec 05 Python
Python try except异常捕获机制原理解析
Apr 18 Python
Python爬虫实现自动登录、签到功能的代码
Aug 20 Python
python中re模块知识点总结
Jan 17 Python
Python实现猜拳与猜数字游戏的方法详解
Apr 06 Python
Python线程池与GIL全局锁实现抽奖小案例
Apr 13 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
浅谈电磁辐射对健康的影响
2021/03/01 无线电
收集的PHP中与数组相关的函数
2007/03/22 PHP
菜鸟javascript基础整理1
2010/12/06 Javascript
15款优秀的jQuery导航菜单插件分享
2011/07/19 Javascript
推荐40个简单的 jQuery 导航插件和教程(下篇)
2012/09/14 Javascript
HTML复选框和单选框 checkbox和radio事件介绍
2012/12/12 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
javascript实现window.print()去除页眉页脚
2014/12/30 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
2015/09/07 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
基于chosen插件实现人员选择树搜索自动筛选功能
2016/09/24 Javascript
JS中call和apply函数用法实例分析
2018/06/20 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
vuex实现像调用模板方法一样调用Mutations方法
2019/11/06 Javascript
详解JavaScript之Array.reduce源码解读
2020/11/01 Javascript
Python实现批量把SVG格式转成png、pdf格式的代码分享
2014/08/21 Python
Python使用Flask框架同时上传多个文件的方法
2015/03/21 Python
深入Python解释器理解Python中的字节码
2015/04/01 Python
Python scikit-learn 做线性回归的示例代码
2017/11/01 Python
pyqt5自定义信号实例解析
2018/01/31 Python
通过cmd进入python的实例操作
2019/06/26 Python
简单了解Django应用app及分布式路由
2019/07/24 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
python初步实现word2vec操作
2020/06/09 Python
详解python对象之间的交互
2020/09/29 Python
巴西最大的体育用品商城:Netshoes巴西
2016/11/29 全球购物
UNIX文件系统分类
2014/11/11 面试题
花卉与景观设计系大学生求职信
2013/10/01 职场文书
入党积极分子学习两会心得体会范文
2014/03/17 职场文书
感恩老师的演讲稿
2014/05/06 职场文书
开展读书活动总结
2014/06/30 职场文书
十八大观后感
2015/06/12 职场文书
高考百日冲刺决心书
2015/09/23 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js
Python time库的时间时钟处理
2021/05/02 Python
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js