Python中测试函数计算速度最准确的实现方式是什么
Python函数性能计时方案准确度对比
你提到的三种常见计时方案里,timeit.timeit()的测试结果准确度最高,远好于另外两个方法。
三个方法的实际精度和适用场景差异非常明显:
time.time()
这个方法返回的是系统当前的墙钟时间,本质是给人看的现实时间,精度很低,而且会受系统手动调时、NTP自动校时、时钟跳变影响,根本不适合用来测函数的计算速度,最多只能用来统计跨度几十分钟以上的长流程大致耗时,测短代码的话误差经常能到几十甚至上百毫秒,结果完全不可信。time.perf_counter()
这是Python提供的专用高精度计时器,计数不受系统时间调整影响,硬件层面的计时精度很高,单独用它在函数执行前后打时间戳算差值,精度比time.time()好很多。但它的问题是单次测量的结果波动很大——系统当时的CPU调度、后台进程抢资源、Python垃圾回收偶然触发,都可能让单次测出来的结果偏离真实值好几倍。timeit.timeit()
这是标准库专门为小代码片段性能测试做的封装,底层默认就是用time.perf_counter()做计时基础,还做了一堆消除误差的设计:测试前会自动临时关闭垃圾回收避免随机耗时干扰、会自动把被测代码重复跑成千上万次算平均耗时抹平偶发波动、还会做运行预热消除冷启动偏差,测出来的结果稳定性和准确度是三个里面最高的,也是官方推荐的短代码性能基准测试方案。
小提示:如果被测函数本身单次运行耗时不到1毫秒,哪怕用
time.perf_counter()手动计时,也至少要重复跑几十上百次取平均值,结果才有参考价值,这种场景直接用timeit省心得多。
内容的提问来源于stack exchange,提问作者TheRavenSpectre
相关产品推荐
相关产品推荐

