Python性能测试需明确目标、选对工具、控制干扰、正确解读:用timeit测小段代码,pytest-benchmark做函数对比,cProfile定位热点,memory_profiler查内存,并隔离环境、禁用GC、多次运行取中位数。
Python 性能测试不是简单跑个 time.time() 或看一眼脚本运行几秒,关键在于可复现、有对比、控变量、懂瓶颈。盲目测,结果没意义;测错地方,优化全白费。
性能测试前先问自己三个问题:
timeit 或 pytest-benchmark)locust 或 apache bench)cProfile + snakeviz)目标不清,工具选错,数据就不可信。
不同场景对应不同工具,混用会引入干扰:
timeit(自动多次执行、禁用 GC、排除启动开销)python -m timeit -s "import math" "math.sqrt(12345)"
pytest-benchmark,生成统计摘要(mean、stddev、outliers),支持参数化对比cProfile,输出调用次数和累计时间python -m cProfile -s cumulative my_script.py
memory_profiler 查看逐行内存占用
Python 运行受太多外部因素影响,必须隔离:
pip freeze > requirements.txt)gc.disable())防止 GC 在测试中随机打断,测完再恢复拿到数据只是开始,重点是读出“为什么”:
cProfile 中关注 tottime(函数自身耗时,不含子调用)而非 cumtime,找真正的“热点”json.loads)占时高,别急着重写——先确认是不是数据量真大,或能否用 orjson 替代不复杂但容易忽略。测得准,才敢动
