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时间整形转标准格式的示例分享
Feb 14 Python
分析Python编程时利用wxPython来支持多线程的方法
Apr 07 Python
Python编程中的文件读写及相关的文件对象方法讲解
Jan 19 Python
python实现红包裂变算法
Feb 16 Python
python用pickle模块实现“增删改查”的简易功能
Jun 07 Python
解决已经安装requests,却依然提示No module named requests问题
May 18 Python
python ftp 按目录结构上传下载的实现代码
Sep 12 Python
Python re 模块findall() 函数返回值展现方式解析
Aug 09 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
Feb 27 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
Apr 10 Python
Python selenium文件上传下载功能代码实例
Apr 13 Python
使用python-cv2实现视频的分解与合成的示例代码
Oct 26 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中修改浏览器的User-Agent来伪装你的浏览器和操作系统
2011/07/29 PHP
destoon二次开发常用数据库操作
2014/06/21 PHP
ThinkPHP中Session用法详解
2014/11/29 PHP
使用php自动备份数据库表的实现方法
2017/07/28 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
2018/11/30 PHP
dwr spring的集成实现代码
2009/03/22 Javascript
Javascript JSQL,SQL无处不在,
2010/05/05 Javascript
jquery的ajax请求全面了解
2013/03/20 Javascript
fmt:formatDate的输出格式详解
2014/01/09 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
浅谈jQuery构造函数分析
2015/05/11 Javascript
浅谈Jquery核心函数
2015/06/18 Javascript
原生JS获取元素的位置与尺寸实现方法
2017/10/18 Javascript
Angular4实现鼠标悬停3d倾斜效果
2017/10/25 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
2018/09/14 Javascript
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
使用Python制作获取网站目录的图形化程序
2015/05/04 Python
Python输出汉字字库及将文字转换为图片的方法
2016/06/04 Python
Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法
2018/04/22 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
2018/07/31 Python
python 执行文件时额外参数获取的实例
2018/12/18 Python
Python闭包思想与用法浅析
2018/12/27 Python
Django REST framework 如何实现内置访问频率控制
2019/07/23 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
2019/11/15 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
Html5 FileReader实现即时上传图片功能实例代码
2014/09/01 HTML / CSS
国际政治个人自荐信范文
2013/11/26 职场文书
2014年感恩节活动策划方案
2014/10/06 职场文书
2015年民主生活会发言材料
2014/12/15 职场文书
毕业感言怎么写
2015/07/31 职场文书
一篇合格的广告文案,其主要目的是什么?
2019/07/12 职场文书
优胜劣汰,强者为王——读《鲁滨逊漂流记》有感
2019/08/15 职场文书
600字作文之感受大自然
2019/11/27 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript
5人制售《绝地求生》游戏外挂获利500多万元 被判刑
2022/03/31 其他游戏
MySQL一劳永逸永久支持输入中文的方法实例
2022/08/05 MySQL