python增加一个循环运行的装饰器

在平时编程时, 经常会遇到循环运行一个函数的情况, 我们可以编写一个装饰器来简化这个过程, 实现代码如下:

def LoopRun(duration:float=60,interval:float=1,remainder:float=3)->callable:
    '''
    支持长期运行的装饰器函数
    duration: 持续时长, 单位秒
    interval: 每次循环等待时长
    remainder: 富余出来的时间, 表示多等待的时间
    示例: 
        @LoopRun(10,0.1)    # 运行10s, 每次运行间隔0.1s
        def Abc():print('abc')
        Abc()
    '''
    def decorator(func):
        def wrapper(*args, **kwargs):
            start_time = time.time()  # 获取当前时间
            while True:
                result = func(*args, **kwargs)
                time.sleep(interval)    # 等待一段时间
                current_time = time.time()  # 获取当前时间
                # 判断是否达到停止条件
                if current_time - start_time >= duration+remainder: return result
        return wrapper
    return decorator

btw, 为什么文字少不能发布随笔? 代码不算吗?

posted @ 2023-08-21 11:58  顺其自然,道法自然  阅读(59)  评论(0编辑  收藏  举报