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 相关文章推荐
pycharm 使用心得(七)一些实用功能介绍
Jun 06 Python
Python单元测试框架unittest使用方法讲解
Apr 13 Python
python中类变量与成员变量的使用注意点总结
Apr 29 Python
使用Kivy将python程序打包为apk文件
Jul 29 Python
python中 chr unichr ord函数的实例详解
Aug 06 Python
Python实现桶排序与快速排序算法结合应用示例
Nov 22 Python
python之django母板页面的使用
Jul 03 Python
opencv python 基于KNN的手写体识别的实例
Aug 03 Python
python多进程读图提取特征存npy
May 21 Python
Django 5种类型Session使用方法解析
Apr 29 Python
Python3爬虫中Ajax的用法
Jul 10 Python
基于python制作简易版学生信息管理系统
Apr 20 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
ajax 的post方法实例(带循环)
2011/07/04 PHP
关于file_get_contents返回为空或函数不可用的解决方案
2013/06/24 PHP
php时间计算相关问题小结
2016/05/09 PHP
[原创]php简单防盗链验证实现方法
2016/07/09 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
ThinkPHP中图片按比例切割的代码实例
2019/03/08 PHP
jquery文字上下滚动的实现方法
2013/03/22 Javascript
Javascript自定义排序 node运行 实例
2013/06/05 Javascript
浅析四种常见的Javascript声明循环变量的书写方式
2015/10/14 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
2016/11/07 Javascript
JS实现购物车特效
2017/02/02 Javascript
node.js入门教程之querystring模块的使用方法
2017/02/27 Javascript
使用Bootstrap打造特色进度条效果
2017/05/02 Javascript
在vue中使用v-bind:class的选项卡方法
2018/09/27 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
python通过imaplib模块读取gmail里邮件的方法
2015/05/08 Python
基于Python实现文件大小输出
2016/01/11 Python
利用python打开摄像头及颜色检测方法
2018/08/03 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
2018/11/29 Python
让你Python到很爽的加速递归函数的装饰器
2019/05/26 Python
用Python从0开始实现一个中文拼音输入法的思路详解
2019/07/20 Python
对Django中内置的User模型实例详解
2019/08/16 Python
为什么说Python可以实现所有的算法
2019/10/04 Python
python KNN算法实现鸢尾花数据集分类
2019/10/24 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
关于Keras Dense层整理
2020/05/21 Python
Python如何重新加载模块
2020/07/29 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
2021/02/19 Python
python 求两个向量的顺时针夹角操作
2021/03/04 Python
团日活动总结范文
2014/04/25 职场文书
大学文艺委员竞选稿
2015/11/19 职场文书
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python
Python使用openpyxl批量处理数据
2021/06/23 Python
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server