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 实现堆排序算法代码
Jun 05 Python
Python批量创建迅雷任务及创建多个文件
Feb 13 Python
python中字符串类型json操作的注意事项
May 02 Python
python的pdb调试命令的命令整理及实例
Jul 12 Python
Python 中的lambda函数介绍
Oct 10 Python
在Python中输入一个以空格为间隔的数组方法
Nov 13 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
Aug 30 Python
python计算Content-MD5并获取文件的Content-MD5值方式
Apr 03 Python
xadmin使用formfield_for_dbfield函数过滤下拉表单实例
Apr 07 Python
python如何调用百度识图api
Sep 29 Python
总结python 三种常见的内存泄漏场景
Nov 20 Python
python实现马丁策略的实例详解
Jan 15 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闭包(Closure)使用详解
2013/05/02 PHP
PHP实现无限极分类图文教程
2014/11/25 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
php 实现银联商务H5支付的示例代码
2019/10/12 PHP
javascript css float属性的特殊写法
2008/11/13 Javascript
斜45度寻路实现函数
2009/08/20 Javascript
JavaScript中奇葩的假值示例应用
2014/03/11 Javascript
JS使用oumousemove和oumouseout动态改变图片显示的方法
2015/03/31 Javascript
JS数组array元素的添加和删除方法代码实例
2015/06/01 Javascript
AngularJS基础 ng-list 指令详解及示例代码
2016/08/02 Javascript
JavaScript创建对象_动力节点Java学院整理
2017/06/27 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
2018/03/02 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
2019/06/11 Javascript
vue实现滑动超出指定距离回顶部功能
2019/07/31 Javascript
layui 实现加载动画以及非真实加载进度的方法
2019/09/23 Javascript
vue 子组件修改data或调用操作
2020/08/07 Javascript
Vue 电商后台管理项目阶段性总结(推荐)
2020/08/22 Javascript
[02:03]DOTA2亚洲邀请赛 HGT战队出场宣传片
2015/02/07 DOTA
python两种遍历字典(dict)的方法比较
2014/05/29 Python
Python实现简单HTML表格解析的方法
2015/06/15 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
python+opencv实现摄像头调用的方法
2019/06/22 Python
Python爬虫进阶之爬取某视频并下载的实现
2020/12/08 Python
CSS3 真的会替代 SCSS 吗
2021/03/09 HTML / CSS
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
《千年梦圆在今朝》教学反思
2014/02/24 职场文书
《雕塑之美》教学反思
2014/04/24 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
给校长的建议书400字
2014/05/15 职场文书
煤矿开采专业求职信
2014/07/08 职场文书
商铺门面租房协议书
2014/10/21 职场文书
群众路线教育实践活动总结
2014/10/30 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
vue elementUI表格控制对应列
2022/04/13 Vue.js