Python性能分析神器

Published:

平时使用Python做开发时,基本上只实现了功能,而很少有数据量的支持,所以性能方面并没有太注重,这段时间,终于接触到了上百上千万的数据量,碰到了大大小小以前没注意到的问题,在此分享。

问题发生在Django中内嵌的ORM的数据库查询问题,需要通过A表中的外键获取B表的数据,A表中有个字段models.ForeignKey,这个字段代表B表的记录id,查询的时候,Django先用该id获取对象,再进行查询。因为考虑不周未引入缓存,运行速度极慢。性能分析后,上了redis,性能提升6至20倍。

性能分析神器:

python -m cProfile -o result.out file_name.py
gprof2dot -f pstats result.out | dot -Tpng -o result.png

第一行表示运行file_name.py文件同时,用cProfile进行性能分析,并将分析结果输出至result.out。

第二行是将分析结果可视化,并保存为文件result.png。

初次看到可视化结果result.png真会被这个神奇惊艳到。短短两周已经用这个神器解决了两次性能瓶颈问题。