您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

python重试装饰器示例

2025/10/5 15:03:54发布11次查看
利用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()
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product