对于多处会调用,而只需要执行一次的方法来说(比如多个地方依赖某个配置信息,而使用的时候需要先检查配置信息是否过期,这种检查更新当然是一次就ok),使用以下方法即可。
def run_once(func2=None): ''' 将此注解作用于某方法即可,这里还可以添加第2-n次执行其他方法 :param func2: 可选. :return: ''' def wrap(func): @wraps(func) def inner(*args, **kwargs): try: func.xxxxx raise ValueError except AttributeError: func.xxxxx = 0 return func(*args, **kwargs) except ValueError: if func2 is not None: return func2(*args, **kwargs) else: pass return inner return wrap