如何测量程序中多个方法的调用运行耗时?
简便实现方法:用装饰器给方法加计时功能
嘿,这个需求太常见啦!最简便且优雅的实现方式就是用Python的装饰器——它能在不修改原有方法代码的前提下,给每个方法自动添加上运行时长统计的功能,复用性拉满,完全契合你的场景。
具体实现步骤
1. 编写通用的计时装饰器
我们可以写一个通用的装饰器,用来包裹需要计时的方法:
import time from functools import wraps def measure_time(func): @wraps(func) def wrapper(*args, **kwargs): start_time = time.perf_counter() # 用perf_counter获取高精度计时,适合短间隔测量 result = func(*args, **kwargs) # 执行原方法逻辑 end_time = time.perf_counter() elapsed_time = end_time - start_time print(f"方法 {func.__name__} 运行时长: {elapsed_time:.6f} 秒") return result return wrapper
这里用@wraps(func)是为了保留原方法的元信息(比如方法名、文档字符串),避免后续调用时出现元信息丢失的问题。
2. 给需要计时的方法添加装饰器
直接在你的func1和func2上方加上@measure_time装饰器即可,原有方法的业务逻辑完全不用改动:
@measure_time def func1(): # 这里是你的func1业务逻辑,比如模拟耗时操作 time.sleep(0.5) @measure_time def func2(): # 这里是你的func2业务逻辑 time.sleep(0.3)
3. 在main函数中正常调用方法
现在你在main里按原有逻辑调用func1和func2,装饰器会自动帮你统计并输出每个方法的运行时长:
def main(): print("开始执行程序...") func1() func2() print("程序执行完毕") if __name__ == "__main__": main()
运行后会得到类似这样的输出:
开始执行程序...
方法 func1 运行时长: 0.500123 秒
方法 func2 运行时长: 0.300045 秒
程序执行完毕
额外优化小技巧
- 如果不想把计时信息打印到控制台,而是写入日志,可以把
print替换成日志模块调用,比如logging.info(f"方法 {func.__name__} 运行时长: {elapsed_time:.6f} 秒")。 - 如果需要统计方法的调用次数、总耗时等信息,可以用类装饰器或者在装饰器内部添加计数器变量(借助
nonlocal实现)来拓展功能。
内容的提问来源于stack exchange,提问作者John Gringus
相关产品推荐
相关产品推荐

