Python性能分析 (Profiling)

来源:互联网 发布:字体模仿软件 编辑:程序博客网 时间:2024/04/29 08:13
此页由Linux Wiki用户Chenxing于2012年3月21日 (星期三) 07:02的最后更改。
提示:此文已超过 2 年(960 天)未更新,如发现内容过时或有误,欢迎改进:)

性能分析(Profiling)可用于分析程序的运行时间主要消耗在何处,以便有效优化程序的运行效率。

Profiling可分为两步,一是运行程序收集程序不同部分运行时间的数据,二是数据的可视化和分析。

Hint.gif
提示: 
本文介绍的方法主要针对类Linux系统,部分工具在Windows等系统可能也能使用。

目录

[隐藏]
  • 1 Python Profiling数据采集
    • 1.1 cProfile
    • 1.2 hotshot
  • 2 数据可视化
    • 2.1 Gprof2Dot
    • 2.2 Run Snake Run
    • 2.3 KCacheGrind
  • 3 参考资料

Python Profiling数据采集

cProfile

Python的cProfile模块可用于数据采集,适用于Python 2和Python 3。其调用方法很简单:

import cProfile# 以下调用将运行函数somefunc(),并将相关数据记录到log_file.pyprofcProfile.run('somefunc()', 'log_file.pyprof')

更多信息请参考Python Profiler文档。

有些小程序也可以直接从命令行调用cProfile模块执行[1]

python -m cProfile -o profile_data.pyprof script_to_profile.py

hotshot

hotshot是高性能的Profiling数据采集工具,其运行时对程序效率的影响很小,但会产生巨大的运行记录,分析也比较慢。[2] Python 3中没有hotshot。故如无特殊需求,请使用cProfile。

import hotshotprofiler = hotshot.Profile("hotshot.log")profiler.run('trackStereo.solveStereoNew()')

数据可视化

Gprof2Dot

Gprof2Dot的输出,经dot命令渲染后的图片。

Gprof2Dot可将多种Profiler的数据转成Graphviz可处理的图像表述。配合dot命令,即可得到不同函数所消耗的时间分析图。以处理cProfile的记录为例[3]

# 运行程序记录数据:# python -m cProfile -o profile_data.pyprof path/to/your/script arg1 arg2 # profile_data.pyprof是获取的数据;dot命令需要安装Graphviz才能用gprof2dot.py -f pstats profile_data.pyprof | dot -Tpng -o output.png

Run Snake Run

Run Snake Run截图

RunSnakeRun是个Python脚本,使用wxPython将Profiler数据可视化,效果如图。

RunSnakeRun还可分析内存占用,但仍处于实验阶段。[4]

KCacheGrind

KCacheGrind可视化Python运行时数据

KCacheGrind是Linux中常用的profiling visualization软件,其默认可处理valgrind的输出。通过一些脚本也可以让其分析cProfile或hotshot记录下的数据。

处理cProfile的数据可使用pyprof2calltree:

# 运行程序记录数据:# python -m cProfile -o profile_data.pyprof path/to/your/script arg1 arg2 # 使用pyprof2calltree处理数据并自动调用KCacheGrindpyprof2calltree -i profile_data.pyprof -k

处理hotshot的数据可使用KCacheGrind中的hotshot2calltree命令:

# 使用hotshot2calltree处理数据,完成后需手动在KCacheGrind中打开输出文件hotshot2calltree hotshot.log -o hs_calltree.log
Note.gif
注意: 
KCacheGrind虽然功能强大,但其输出的分析树似乎并不完整,如果您了解原因,请补充。

参考资料

  1. ↑ StackOverflow: Using cProfile results with KCacheGrind
  2. ↑ Python官方文档:hotshot
  3. ↑ Gprof2Dot
  4. ↑ RunSnakeRun
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 八个月小孩发烧怎么办 孩子好动怎么办学龄前教育 小孩好动症该怎么办 小孩子好动症该怎么办 怀孕5个月胎死亡怎么办 小孩多动调皮怎么办 手心老是出汗是怎么办 孩子吃饭特别慢怎么办 小孩子老想睡觉怎么办 孩子下午上课犯困怎么办 小孩子有多动症该怎么办 初中写作业犯困怎么办 孩子晚上学习困怎么办 小孩子容易兴奋激动怎么办 中考时过度兴奋怎么办 小孩兴奋不睡觉怎么办 孩子突然反常不听话怎么办? 婴儿亢奋不睡觉怎么办 宝宝听力筛查没通过怎么办 7个多月宝宝缺钙怎么办 暑假孩子天天看电视怎么办 移植后天天便秘怎么办 天天拉屎还便秘怎么办 孩子不爱吃鸡蛋怎么办 孩子看书没耐心怎么办 5岁宝宝鼻炎怎么办 手术后认知障碍怎么办 孩子很调皮好动怎么办 学生打家长该怎么办 老师打学生家长该怎么办 三岁儿子多动症怎么办 小孩一直缺锌怎么办 宝宝严重缺锌怎么办 儿童缺钙缺锌怎么办 怀孕前期喝酒了怎么办 怀孕之前喝酒了怎么办 怀孕后喝酒了怎么办 刚怀孕喝啤酒怎么办 早孕期间喝酒了怎么办 发现怀孕一个月怎么办 怀孕初期喝白酒怎么办