python如何修改装饰器中参数
发布时间:2020-12-16 20:05:00 所属栏目:Python 来源:网络整理
导读:本文实例为大家分享了python修改装饰器中参数的具体代码,供大家参考,具体内容如下 案例: 为分析程序内哪些函数执行时间开销较大,我们需定义一个带timeout参数的装饰器 需求: 统计被装饰函数的运行时间 时间大于timeout时,将此次函数调用记录到log日志
本文实例为大家分享了python修改装饰器中参数的具体代码,供大家参考,具体内容如下 案例: 为分析程序内哪些函数执行时间开销较大,我们需定义一个带timeout参数的装饰器 需求: 统计被装饰函数的运行时间 时间大于timeout时,将此次函数调用记录到log日志中 运行时可以修改timeout的值 如何解决这个问题?
#!/usr/bin/python3 import time import logging from random import randint def run_time(timeout): """ 定义检查函数运行时间,并打印对应函数运行时间超出设定时间日志,并支持更改timeout """ # python2 # timeout = [timeout] # 真正包裹函数 def out_wrapper(func): def wrapper(*args,**kwargs): start_time = time.time() result = func(*args,**kwargs) used_time = time.time() - start_time # 对于超出timeout的函数进行日志打印 if used_time > timeout: msg = '%s: %s > %s' % (func.__name__,used_time,timeout) logging.warn(msg) # python2 # if used_time > timeout[0]: # msg = '%s: %s > %s' % (func.__name__,timeout[0]) # logging.warn(msg) # return result # 设置timeout参数值 def set_timeout(value): nonlocal timeout timeout = value wrapper.set_timeout = set_timeout # python2 # def set_timeout(value): # timeout[0] = value # wrapper.set_timeout = set_timeout return wrapper return out_wrapper @run_time(1.5) def func(): # 随机有50%的几率程序沉睡1秒 while randint(0,1): time.sleep(1) print('func_run') if __name__ == "__main__": for _ in range(10): func() print('_'*50) # 更改run_time装饰器中timeout参数 func.set_timeout(2) for _ in range(10): func() 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。 您可能感兴趣的文章:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |