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中用于转换字母为小写的lower()方法使用简介
May 19 Python
Android应用开发中Action bar编写的入门教程
Feb 26 Python
python字典DICT类型合并详解
Aug 17 Python
pycharm修改界面主题颜色的方法
Jan 17 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
Jul 22 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
Jul 22 Python
深入浅析Python科学计算库Scipy及安装步骤
Oct 12 Python
python实现双色球随机选号
Jan 01 Python
Python 实现opencv所使用的图片格式与 base64 转换
Jan 09 Python
python代码能做成软件吗
Jul 24 Python
Python 日期与时间转换的方法
Aug 01 Python
python爬虫selenium模块详解
Mar 30 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
国王的咖啡这么大来头,名字的由来是什么
2021/03/03 咖啡文化
php addslashes和mysql_real_escape_string
2010/01/24 PHP
允许phpmyadmin空密码登录的配置方法
2011/05/29 PHP
php中最简单的字符串匹配算法
2014/12/16 PHP
基于jQuery的实现简单的分页控件
2010/10/10 Javascript
iframe 异步加载技术及性能分析
2011/07/19 Javascript
checkbox勾选判断代码分析
2014/06/11 Javascript
Javascript Object 对象学习笔记
2014/12/17 Javascript
使用VS开发 Node.js指南
2015/01/06 Javascript
iPhone手机上搭建nodejs服务器步骤方法
2015/07/06 NodeJs
在Ubuntu系统上安装Node.JS的教程
2015/10/15 Javascript
学习JavaScript正则表达式
2015/11/13 Javascript
JS实现按钮添加背景音乐示例代码
2017/10/17 Javascript
代码详解Vuejs响应式原理
2017/12/20 Javascript
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
解决vue单页面修改样式无法覆盖问题
2019/08/05 Javascript
封装Vue Element的table表格组件的示例详解
2020/08/19 Javascript
跟老齐学Python之使用Python查询更新数据库
2014/11/25 Python
python 遍历列表提取下标和值的实例
2018/12/25 Python
python常用库之NumPy和sklearn入门
2019/07/11 Python
python中有关时间日期格式转换问题
2019/12/25 Python
python 自定义异常和主动抛出异常(raise)的操作
2020/12/11 Python
CSS3实现多背景展示效果通过CSS3定位多张背景
2014/08/10 HTML / CSS
Rakuten Kobo台湾:电子书、eReaders和Reading应用程式
2017/11/24 全球购物
廉价连衣裙和婚纱礼服在线销售:Tbdress
2019/02/28 全球购物
extern在函数声明中是什么意思
2014/01/19 面试题
教师岗位职责
2013/11/17 职场文书
幼儿园大班教学反思
2014/02/10 职场文书
百年校庆节目主持词
2014/03/27 职场文书
优秀教师申报材料
2014/12/16 职场文书
先进个人推荐材料
2014/12/29 职场文书
2015年外联部工作总结
2015/04/03 职场文书
刑事撤诉申请书
2015/05/18 职场文书
虎兄虎弟观后感
2015/06/12 职场文书
高温慰问简报
2015/07/21 职场文书
Apache SkyWalking 监控 MySQL Server 实战解析
2022/09/23 Servers