如何排除等待时间,精准测量Python函数实际运行时长?
解决装饰器误计弹窗等待时间的方案
你遇到的问题核心是:原装饰器用的time()统计的是真实流逝的墙钟时间,会把用户关闭弹窗的空闲等待时间也计入其中。要只测量函数实际占用CPU运行的时长,换成time.process_time()即可——这个函数仅统计当前进程实际使用CPU的时间,自动排除用户交互等待、休眠、IO阻塞这类非执行状态的时间。
修改后的装饰器代码如下:
from functools import wraps from time import process_time def timing(f): @wraps(f) def wrap(*args, **kw): ts = process_time() result = f(*args, **kw) te = process_time() print(f'func:{f.__name__} args:[{args}, {kw}] CPU运行时长: {te-ts} sec') return result return wrap
直接替换原代码中的time()为process_time()就能解决问题。如果你的函数涉及多线程/多进程场景,或者需要更高精度的计时,也可以使用process_time_ns()(返回纳秒级CPU时间),效果是一致的。
内容的提问来源于stack exchange,提问作者smyril
相关产品推荐
相关产品推荐

