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之玩转字符串(2)更新篇
Sep 28 Python
一文总结学习Python的14张思维导图
Oct 17 Python
Python 将Matrix、Dict保存到文件的方法
Oct 30 Python
python找出完数的方法
Nov 12 Python
对python xlrd读取datetime类型数据的方法详解
Dec 26 Python
Python实现的统计文章单词次数功能示例
Jul 08 Python
python实现音乐播放器 python实现花框音乐盒子
Feb 25 Python
Python dict和defaultdict使用实例解析
Mar 12 Python
pycharm工具连接mysql数据库失败问题
Apr 01 Python
浅谈pytorch中torch.max和F.softmax函数的维度解释
Jun 28 Python
如何使用python自带IDLE的几种方法
Oct 10 Python
python 装饰器重要在哪
Feb 14 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 eval函数用法 PHP中eval()函数小技巧
2012/10/31 PHP
PHP实现自动登入google play下载app report的方法
2014/09/23 PHP
PHP经典面试题集锦
2015/03/19 PHP
PHP图片加水印实现方法
2016/05/06 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
2017/06/10 PHP
如何使用jquery动态加载js,css文件实现代码
2013/04/03 Javascript
解析JavaScript中delete操作符不能删除的对象
2013/12/03 Javascript
jquery实现页面图片等比例放大缩小功能
2014/02/12 Javascript
JavaScript获取Url里的参数
2014/12/18 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
原生js实现下拉框功能(支持键盘事件)
2017/01/13 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
2017/03/02 Javascript
微信小程序实现多选功能
2018/11/04 Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
2019/04/04 jQuery
layui使用数据表格实现购物车功能
2019/07/26 Javascript
vue基础知识--axios合并请求和slot
2020/06/04 Javascript
javascript实现移动端红包雨页面
2020/06/23 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
[54:27]TNC vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python字符串和文件操作常用函数分析
2015/04/08 Python
探究Python多进程编程下线程之间变量的共享问题
2015/05/05 Python
基于Python List的赋值方法
2018/06/23 Python
基于Python开发chrome插件的方法分析
2018/07/07 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
2018/12/26 Python
使用python爬取抖音视频列表信息
2019/07/15 Python
利用CSS3的定位页面元素
2009/08/29 HTML / CSS
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
shell程序中如何注释
2012/02/17 面试题
最新计算机专业自荐信
2013/10/16 职场文书
养殖行业的创业计划书
2014/01/05 职场文书
小学生国旗下演讲稿
2014/04/25 职场文书
师德师风个人整改措施
2014/10/27 职场文书
员工福利申请报告
2015/05/15 职场文书
apache基于端口创建虚拟主机的示例
2021/04/24 Servers
MySQL去除密码登录告警的方法
2022/04/20 MySQL