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中的split()函数的使用方法
Apr 07 Python
举例讲解如何在Python编程中进行迭代和遍历
Jan 19 Python
python3.6使用pymysql连接Mysql数据库
May 25 Python
python实现n个数中选出m个数的方法
Nov 13 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
Oct 12 Python
Python 将json序列化后的字符串转换成字典(推荐)
Jan 06 Python
Python GUI库PyQt5样式QSS子控件介绍
Feb 25 Python
Python类的动态绑定实现原理
Mar 21 Python
PyQt5如何将.ui文件转换为.py文件的实例代码
May 26 Python
python实现测试工具(一)——命令行发送get请求
Oct 19 Python
Python 内存管理机制全面分析
Jan 16 Python
Python中X[:,0]和X[:,1]的用法
May 10 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
php 深入理解strtotime函数的使用详解
2013/05/23 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
2015/12/23 PHP
php网页版聊天软件实现代码
2016/08/12 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
2019/10/24 PHP
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
JQ获取动态加载的图片大小的正确方法分享
2013/11/08 Javascript
使用Chrome调试JavaScript的断点设置和调试技巧
2014/12/16 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
js命名空间写法示例
2015/12/18 Javascript
基于javascript实现右下角浮动广告效果
2016/01/08 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
JS中关于事件处理函数名后面是否带括号的问题
2016/11/16 Javascript
基于vue实现分页/翻页组件paginator示例
2017/03/09 Javascript
Node.js readline模块与util模块的使用
2018/03/01 Javascript
Bootstrap table表格初始化表格数据的方法
2018/07/25 Javascript
微信小程序实现手势滑动效果
2019/08/26 Javascript
微信小程序request请求封装,验签代码实例
2019/12/04 Javascript
详解Nuxt内导航栏的两种实现方式
2020/04/16 Javascript
在vue中实现某一些路由页面隐藏导航栏的功能操作
2020/09/21 Javascript
python socket网络编程步骤详解(socket套接字使用)
2013/12/06 Python
python中实现延时回调普通函数示例代码
2017/09/08 Python
python实现下载pop3邮件保存到本地
2018/06/19 Python
Python实现简单查找最长子串功能示例
2019/02/26 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
2020/05/07 Python
python palywright库基本使用
2021/01/21 Python
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
大学新生欢迎词
2014/01/10 职场文书
新浪微博实习心得体会
2014/01/27 职场文书
残疾人小组计划书
2014/04/27 职场文书
2015年计算机教师工作总结
2015/07/22 职场文书
2016党员干部反腐倡廉心得体会
2016/01/13 职场文书
CocosCreator入门教程之网络通信
2021/04/16 Javascript
CSS文本阴影 text-shadow 悬停效果详解
2022/05/25 HTML / CSS