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进行行为驱动开发的入门教程
Apr 23 Python
python实现按行切分文本文件的方法
Apr 18 Python
python中pandas.DataFrame排除特定行方法示例
Mar 12 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
Jun 20 Python
Python中getpass模块无回显输入源码解析
Jan 11 Python
python如何使用unittest测试接口
Apr 04 Python
python抽取指定url页面的title方法
May 11 Python
对numpy Array [: ,] 的取值方法详解
Jul 02 Python
Django项目之Elasticsearch搜索引擎的实例
Aug 21 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
Apr 19 Python
python基于win32api实现键盘输入
Dec 09 Python
Python 实现绘制子图及子图刻度的变换等问题
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
150kHz到30Mhz完全冲浪手册
2020/03/20 无线电
PHP函数eval()介绍和使用示例
2014/08/20 PHP
PHP检测用户是否关闭浏览器的方法
2016/02/14 PHP
php cli模式下获取参数的方法
2017/05/05 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
你需要知道的JavsScript可以做什么?
2007/06/29 Javascript
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
基于jQuery的图片剪切插件
2011/08/03 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
Javascript基础教程之if条件语句
2015/01/18 Javascript
JavaScript随机生成信用卡卡号的方法
2015/04/07 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
2015/04/13 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
2017/02/14 Javascript
详解Webpack+Babel+React开发环境的搭建的方法步骤
2018/01/09 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
ES6 class类链式继承,实例化及react super(props)原理详解
2020/02/15 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
2020/03/05 Javascript
vant实现购物车功能
2020/06/29 Javascript
[49:35]LGD vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
Django1.7+python 2.78+pycharm配置mysql数据库教程
2014/11/18 Python
python数字图像处理实现直方图与均衡化
2018/05/04 Python
python将视频转换为全字符视频
2019/04/26 Python
Python基本类型的连接组合和互相转换方式(13种)
2019/12/16 Python
canvas绘图按照contain或者cover方式适配并居中显示
2019/02/18 HTML / CSS
美国韩国化妆品和护肤品购物网站:Beautytap
2018/07/29 全球购物
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
附答案的Java面试题
2012/11/19 面试题
编写函数,将一个3*3矩阵转置
2013/10/09 面试题
《大海那边》教学反思
2014/04/09 职场文书
2014年群众路线教育实践活动整改措施
2014/09/24 职场文书
保护校园环境倡议书
2015/04/28 职场文书
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书
2016大学军训心得体会
2016/01/11 职场文书
《地震中的父与子》教学反思
2016/02/16 职场文书
公司年会晚会开幕词
2019/04/02 职场文书