python重试装饰器示例
2014-02-11 00:00
1046 查看
利用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中的yield使用方法
- Python的print用法示例
- 优秀Python学习资源
- Python学习笔记(1)
- 优秀Python学习资源收集汇总(强烈推荐)
- [Python] The project structure in Django
- python - django - 初步认识
- 优秀Python学习资源收集汇总(强烈推荐)
- Python_C4_作出决策【上】
- Python菜鸟学习第三课
- Python字典排序的简单实现
- python中单引号,双引号,多引号区别
- Python_C3_变量【下】
- python:UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xef in position xxx: ordinal not in range(128)
- python 字符串转时间
- MySQL-python
- PHP / Web / Python
- 编程之美1.3 一摞烙饼的排序(Python)
- python的性能分析工具line_profiler
- Python之分片操作