retry_decorator

1 功能

  • 函数可以根据以下条件重试:

    • 执行结果是否成功 (like a status code not equaling 200)

    • Exceptions (like a function raising a requests.RequestException)

      • 所有接受的异常也会在失败时引发原始异常!

  • 函数执行失败可能是:

    • 超过最大重试次数

    • 达到最大超时时间

  • 函数重试可以按特定的间隔间隔进行

2 例子

2.1 简单例子

from xlib.util import retry

print "------------------------------------------func"
@retry.retry(max_retries=3, interval=5)
def add(a, b):
    return a + b


print add(3, 5)

print "------------------------------------------class"
class Demo():
    @retry.retry(max_retries=3, interval=5)
    def add(self, a, b):
        assert a == 4
        return a + b

demo = Demo()
print demo.add(3, 5)

2.2 装饰器

Send a GET request to a URL until it returns a status code of 200!

每秒重试一次

import requests

from xlib.util import retry

@retry.retry(max_retries=-1, interval=1, success=lambda x: x.status_code == 200)
def poll_url(url, method='GET'):
    return requests.request(method, url)

2.3 添加超时时间

Same function as above, timeout after 10 seconds!

import requests

from xlib.util import retry

@retry.retry(max_retries=-1, interval=1, success=lambda x: x.status_code == 200, timeout=10)
def poll_url(url, method='GET'):
    return requests.request(method, url)

2.4 添加 exceptions 参数

Same function as above, timeout after 10 seconds!

import requests

from xlib.util import retry

@retry.retry(
    exceptions=(requests.RequestException,), max_retries=-1, interval=1,
    success=lambda x: x.status_code == 200, timeout=10)
def poll_url(url, method='GET'):
    return requests.request(method, url)

Last updated