python retry装饰器

from functools import wraps
import time

# def retry(retry_time, retry_on_result, time_wait):
#     def test(func):
#         @wraps(func)
#         def wrapper(*args, **kwargs):
#             i = 0
#             while i < retry_time:
#                 i += 1
#                 res = func(*args, **kwargs)
#                 if not retry_on_result(res):
#                     return res
#                 time.sleep(time_wait)
#         return wrapper
#     return test

class retry:
    def __init__(self, retry_time, retry_on_result, time_wait):
        self.retry_time = retry_time
        self.retry_on_result = retry_on_result
        self.time_wait = time_wait
    
    def __call__(self, func):
        @wraps(func)
        def wrapped(*args, **kwargs):
            i = 0
            while i < self.retry_time:
                res = func(*args, **kwargs)
                if not self.retry_on_result(res):
                    return res
                i+=1
                time.sleep(self.time_wait)
        return wrapped


@retry(3, lambda x: x is None, 1)
def test(a):
    print(a)
    return None



if __name__ == "__main__":
    print(test("s"))

  

posted @ 2022-10-24 14:52  WenderWang  阅读(159)  评论(0)    收藏  举报