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中的XML库4Suite Server的介绍
Apr 14 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
Jun 14 Python
Python实现对一个函数应用多个装饰器的方法示例
Feb 09 Python
Python3实现的Mysql数据库操作封装类
Jun 06 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
Jul 11 Python
python实现随机漫步方法和原理
Jun 10 Python
Python3 虚拟开发环境搭建过程(图文详解)
Jan 06 Python
python爬取本站电子书信息并入库的实现代码
Jan 20 Python
Java byte数组操纵方式代码实例解析
Jul 22 Python
Python面向对象实现方法总结
Aug 12 Python
Python与C/C++的相互调用案例
Mar 04 Python
python中的plt.cm.Paired用法说明
May 31 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简单对象与数组的转换函数代码(php多层数组和对象的转换)
2011/05/18 PHP
mysql,mysqli,PDO的各自不同介绍
2012/09/19 PHP
PHP执行shell脚本运行程序不产生core文件的方法
2016/12/28 PHP
Nigma vs Liquid BO3 第二场2.14
2021/03/10 DOTA
JS对URL字符串进行编码/解码分析
2008/10/25 Javascript
用js实现小球的自由移动代码
2013/04/22 Javascript
节点的插入之append()和appendTo()的用法介绍
2014/01/13 Javascript
JS中三目运算符和if else的区别分析与示例
2014/11/21 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
jQuery中数据缓存$.data的用法及源码完全解析
2016/04/29 Javascript
微信小程序本地缓存数据增删改查实例详解
2017/05/24 Javascript
vue滚动轴插件better-scroll使用详解
2017/10/17 Javascript
20行JS代码实现粘贴板复制功能
2018/02/06 Javascript
vue使用echarts图表的详细方法
2018/10/22 Javascript
详解vue-router数据加载与缓存使用总结
2018/10/29 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
详解微信小程序动画Animation执行过程
2020/09/23 Javascript
[02:11]2014DOTA2 TI专访VG战队Fenrir:队伍气氛良好
2014/07/11 DOTA
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
Python抓取Discuz!用户名脚本代码
2013/12/30 Python
用Python输出一个杨辉三角的例子
2014/06/13 Python
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
python 工具 字符串转numpy浮点数组的实现
2020/03/14 Python
大学生毕业求职简历的自我评价
2013/10/24 职场文书
小学教师师德感言
2014/02/10 职场文书
设计师求职信模板
2014/05/06 职场文书
警察先进个人事迹材料
2014/05/16 职场文书
应届生自荐信
2014/06/30 职场文书
工伤事故处理协议书怎么写
2014/10/15 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
大学生暑假实习总结
2015/07/13 职场文书
用Python selenium实现淘宝抢单机器人
2021/06/18 Python
JS前端轻量fabric.js系列物体基类
2022/08/05 Javascript