为什么要做性能基准测试
在日常办公自动化中,很多人会用 Python 写脚本处理 Excel 表格、合并文档或定时抓取数据。一开始脚本跑得挺快,但随着数据量变大,比如要处理上千个文件时,运行时间从几秒拖到几分钟,这时候就该看看哪段代码拖了后腿。
性能基准测试不是程序员的专属工具,只要是写过几行脚本的人,都能用它来找出瓶颈。比如你写的导出报表脚本,昨天还 3 秒完成,今天突然要 30 秒,可能只是加了个循环嵌套,自己都没注意。
用 timeit 快速测函数耗时
Python 自带的 timeit 模块适合测小段代码的执行时间,比用 time.time() 手动计算更准,因为它会自动多次运行取平均值,减少系统干扰。
import timeit</br></br>def slow_function():</br> return sum(i * i for i in range(10000))</br></br># 测试函数运行 1000 次的平均耗时</br>elapsed = timeit.timeit(slow_function, number=1000)</br>print(f'平均耗时: {elapsed / 1000:.6f} 秒')这段代码能告诉你平方求和函数到底多慢。如果发现每次升级逻辑后时间明显增加,就知道该回头优化了。
用 cProfile 查看完整调用链
当脚本文件多了,函数之间互相调用复杂,timeit 就不够用了。这时候用 cProfile 能看到每个函数被调用了多少次、花了多少时间。
import cProfile</br></br>def process_files():</br> for i in range(500):</br> _ = [j ** 2 for j in range(100)]</br></br># 运行性能分析</br>cProfile.run('process_files()')输出结果里会列出函数名、调用次数、累计时间。比如你发现某个读取配置的函数被调了上千次,其实完全可以只调一次然后缓存结果,这就是优化点。
实际场景:优化日报生成脚本
有个同事写了个自动生成日报的脚本,每次都要连数据库查 20 次,每查一次等半秒,光等待就花了 10 秒。后来用 cProfile 一查才发现,同一个查询重复执行,改成了批量获取后,总时间降到 2 秒内。
这种问题在办公场景很常见,特别是刚学 Python 的人容易忽略 IO 操作的代价。通过简单的性能测试,就能避免“写完能跑就行”的惯性思维。
养成测试习惯,别等卡顿才动手
每次修改关键逻辑后,花一分钟跑一次 timeit,就像保存文件前顺手格式化代码一样自然。不需要每次都出报告,只要心里有数:这次改动是变快了还是变慢了。
性能测试不是为了追求极致速度,而是让脚本始终处于“可用且不浪费时间”的状态。毕竟上班时间宝贵,没人愿意盯着进度条等三分钟,只为导出一个表格。