python重试装饰器示例

时间:2022-07-28 10:03:12 

利用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,装饰器
0
投稿

猜你喜欢

  • Python设计模式中的结构型桥接模式

    2021-07-23 23:43:31
  • asp 获取url函数小结

    2011-03-17 10:38:00
  • 常用java正则表达式的工具类

    2023-06-14 09:16:46
  • Python装饰器详细介绍

    2022-09-28 17:52:16
  • Python面向对象编程之类的封装

    2022-10-20 05:29:49
  • Python 操作 PostgreSQL 数据库示例【连接、增删改查等】

    2021-12-14 00:54:08
  • tensorflow实现对图片的读取的示例代码

    2023-07-20 06:07:30
  • Warning: require(): open_basedir restriction in effect,目录配置open_basedir报错问题分析

    2023-06-02 23:28:18
  • pytorch 权重weight 与 梯度grad 可视化操作

    2021-02-15 22:42:20
  • 让所有IE支持HTML5的解决方案

    2009-10-31 18:43:00
  • python带你探寻WSGI Application原理

    2022-03-25 19:35:55
  • 详解如何在 Linux 中安装最新的 Python 3.6 版本

    2022-03-25 15:06:21
  • MySQL的命令行提示符及其表达的意思

    2008-03-17 13:34:00
  • Python中fnmatch模块的使用详情

    2021-06-14 20:50:18
  • 服务端XMLHTTP(ServerXMLHTTP in ASP)基本应用(上)

    2008-11-11 12:49:00
  • Linux安装卸载Mysql数据库

    2011-01-29 16:45:00
  • RedHat 9.0下用rpm包安装mysql

    2008-11-22 12:28:00
  • Python 多个图同时在不同窗口显示的实现方法

    2022-07-02 01:20:35
  • [译]2009年海外Web设计风潮(下)

    2009-01-23 09:34:00
  • Python基础之常用库常用方法整理

    2022-10-30 10:43:26
  • asp之家 网络编程 m.aspxhome.com