You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何测量程序中多个方法的调用运行耗时?

简便实现方法:用装饰器给方法加计时功能

嘿,这个需求太常见啦!最简便且优雅的实现方式就是用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:39:32