Python 中如何测量程序(或代码段)的执行时间?

测量 Python 代码执行时间:time.perf_counter() 最适合精确计时,time.time() 简单通用,timeit 模块适合小段代码的基准测试。

最佳实践
Python 中如何测量程序(或代码段)的执行时间?封面

精确计时推荐 time.perf_counter()——它是单调高精度时钟,不受系统时间调整影响。简单场景用 time.time() 差值也够;小段代码的严肃基准测试用 timeit 模块。

方法一:time.perf_counter()(推荐)

import time

start = time.perf_counter()

# 要计时的代码
result = sum(range(1000000))

elapsed = time.perf_counter() - start
print(f"耗时: {elapsed:.4f} 秒")

perf_counter 是单调时钟,即使系统时间被 NTP 调整也不会影响计时结果。

方法二:time.time()(简单场景)

import time

start_time = time.time()
# ... 执行代码 ...
print("耗时:", time.time() - start_time)

返回 Unix 时间戳,精度足够大多数日志用途。

方法三:timeit(基准测试)

import timeit

t = timeit.timeit('sum(range(1000))', number=10000)
print(f"平均每次: {t/10000*1000:.4f} 毫秒")

自动多次运行取总耗时,屏蔽偶然波动,适合比较不同实现的性能。

进阶:上下文管理器/装饰器

from contextlib import contextmanager
import time

@contextmanager
def timer(name):
    start = time.perf_counter()
    yield
    print(f"{name} 耗时: {time.perf_counter()-start:.4f}s")

with timer("数据处理"):
    sum(range(1000000))

观测云对照

生产环境的性能测量不建议靠手写计时——观测云 APM 通过分布式链路追踪自动记录每个方法的耗时,火焰图直观展示瓶颈,比埋点计时全面得多。

常见问题(FAQ)

Q:perf_counter 和 time() 差多少?
A:日常测量差别不大;但 perf_counter 精度更高(纳秒级)且单调递增,是官方推荐的计时函数。

Q:测异步代码呢?
A:同样用 perf_counter,在 await 前后取差值即可。

Q:想看每行代码的耗时?
A:用 line_profilercProfile 做性能剖析,比手动埋点高效。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台