|
利用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中的装饰器用法详解
- 详解Python中的装饰器、闭包和functools的教程
- python 装饰器功能以及函数参数使用介绍
- Python中的多重装饰器
- 详解Python装饰器由浅入深
- Python装饰器decorator用法实例
- 实例讲解Python编程中@property装饰器的用法
- Python自动重试HTTP连接装饰器
- Python装饰器原理与简单用法实例分析
(编辑:安卓应用网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|