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中实现字符串类型与字典类型相互转换的方法
Aug 18 Python
python抽象基类用法实例分析
Jun 04 Python
Python队列的定义与使用方法示例
Jun 24 Python
Python进程间通信之共享内存详解
Oct 30 Python
Python使用matplotlib的pie函数绘制饼状图功能示例
Jan 08 Python
Python实现定时自动关闭的tkinter窗口方法
Feb 16 Python
详解python中*号的用法
Oct 21 Python
python selenium操作cookie的实现
Mar 18 Python
Pytorch mask-rcnn 实现细节分享
Jun 24 Python
Python数据模型与Python对象模型的相关总结
Jan 26 Python
python利用appium实现手机APP自动化的示例
Jan 26 Python
Python 文本滚动播放器的实现代码
Apr 25 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 接口类与抽象类的实际作用
2009/11/26 PHP
php中socket通信机制实例详解
2015/01/03 PHP
php实现RSA加密类实例
2015/03/26 PHP
php使用指定编码导出mysql数据到csv文件的方法
2015/03/31 PHP
Centos 6.5系统下编译安装PHP 7.0.13的方法
2016/12/19 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
2019/03/22 PHP
JavaScript 指导方针
2007/04/05 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
Html5的placeholder属性(IE兼容)实现代码
2014/08/30 Javascript
jQuery+ajax实现无刷新级联菜单示例
2015/05/21 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
2015/05/25 Javascript
Bootstrap表单布局样式代码
2016/05/31 Javascript
再谈javascript注入 黑客必备!
2016/09/14 Javascript
Angular2从搭建环境到开发步骤详解
2016/10/17 Javascript
微信JS-SDK选取手机照片上传功能
2017/04/21 Javascript
Bootstrap布局之栅格系统学习笔记
2017/05/04 Javascript
vue-cli构建项目下使用微信分享功能
2018/05/28 Javascript
vue 表单输入格式化中文输入法异常问题
2018/05/30 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
2018/07/30 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
vue页面切换项目实现转场动画的方法
2019/11/12 Javascript
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
python 正则表达式 概述及常用字符
2009/05/04 Python
跟老齐学Python之for循环语句
2014/10/02 Python
利用aardio给python编写图形界面
2017/08/21 Python
linecache模块加载和缓存文件内容详解
2018/01/11 Python
python爬虫之自制英汉字典
2019/06/24 Python
linux环境下Django的安装配置详解
2019/07/22 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
2019/12/04 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
2020/01/20 Python
Python绘制K线图之可视化神器pyecharts的使用
2021/03/02 Python
有针对性的求职自荐信
2013/11/14 职场文书
文明倡议书范文
2014/04/15 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
获奖感言范文
2015/07/31 职场文书
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫