此页由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.pyprof
cProfile.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 hotshot
profiler = 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处理数据并自动调用KCacheGrind
pyprof2calltree -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

Python性能分析 (Profiling)相关推荐

  1. Python性能分析优化及测试

    Python性能分析优化及测试 写在前面 CPU分析工具 简单的time方法以及包装成的修饰器 timeit UNIX的time命令进行简单的计时 cProfile:分析每个函数运行花费的时间 lin ...

  2. python性能分析(一)——使用timeit给你的程序打个表吧

    前言 我们可以通过查看程序核心算法的代码,得知核心算法的渐进上界或者下界,从而大概估计出程序在运行时的效率,但是这并不够直观,也不一定十分靠谱(在整体程序中仍有一些不可忽略的运行细节在估计时被忽略了) ...

  3. python性能分析工具模块_python——关于Python Profilers性能分析器

    1. 介绍性能分析器 profiler是一个程序,用来描述运行时的程序性能,并且从不同方面提供统计数据加以表述.Python中含有3个模块提供这样的功能,分别是cProfile, profile和ps ...

  4. Python性能分析入门——cProfile、可视化、逐行分析、内存分析

    文章目录 简介 cProfile PyCharm 可视化 安装 gprof2dot SnakeViz PyCallGraph 逐行分析 内存分析 内存堆分析 其他 遇到的坑 参考文献 简介 通过性能分 ...

  5. Python性能分析的学习笔记

    1 介绍 在这篇文章中,我们将讲述一下关于python代码的性能分析- 2 资料收藏 Pyinstrument Pyinstrument是我在<涛哥聊python>中看到的一个性能分析工具 ...

  6. Python 性能分析入门指南

    为什么80%的码农都做不了架构师?>>>    在岭南六少博客找到的好东西. 注: 本文的原作者是 Huy Nguyen ,原文地址为 A guide to analyzing Py ...

  7. Python性能分析利器pyinstrument讲解

    一.前言 程序的性能也是非常关键的指标,很多时候你的代码跑的快,更能够体现你的技术.最近发现很多小伙伴在性能分析的过程中都是手动打印运行时间的方式来统计代码耗时的: import datetime s ...

  8. python性能分析与优化

    性能分析: 1.种类: 基于事件的性能分析通过收集程序执行过程中的具体事件进行工作,每个调用都会触发,输出数据量大,精度高def profiler(frame, event, arg):print ' ...

  9. python性能分析工具

    1)cProfile cProfile可以嵌入到python代码中执行,比如: import cProfile cProfile.run('foo()', 'foo.out') 查看结果需要pstat ...

最新文章

  1. 算法笔记--单调队列优化dp
  2. 将二叉搜索树转换为有序的双向链表
  3. Linux_LAMP 最强大的动态网站解决方案
  4. python【力扣LeetCode算法题库】面试题62- 圆圈中最后剩下的数字(约瑟夫环)
  5. 记录贴-配置HTTPS域名访问到本地局域网网关
  6. CentOS/用FTP客户端软件连接到服务器
  7. 使用Servlet实现用户注册
  8. windows下配置tensorflow
  9. Win11系统如何设置任务栏新消息提醒
  10. MySQL 高可用架构在业务层面细化分析研究
  11. 钉钉日志范文100篇_钉钉的日志模板怎么修改 钉钉日志模板修改教程
  12. Windows Mobile下猜数字游戏的TDD实现
  13. bzoj 1260: [CQOI2007]涂色paint(区间DP)
  14. 《Go语言实战》学习笔记——包
  15. 【阮一峰ES6入门教程学习笔记】函数的扩展
  16. h5难做吗_这样的h5制作难吗,通过什么平台可以做出来?
  17. 十进制转32位二进制(Java)
  18. wcdma码片速率_WCDMA中3.84M码片速率的由来
  19. 探索AI实践最优解,AISummit全球人工智能技术大会完美落幕
  20. el-table表格无数据时,更改其自带的提示‘暂无数据’

热门文章

  1. Java网页编程与设计——javascript语言
  2. 股票入门:什么是股票指数,什么是大盘指数
  3. 有赞android电话面试,有赞校招面试总结
  4. 利用博客提交作业的程序设计课程实践模式
  5. opencv+dlib实现给蒙娜丽莎“配”眼镜
  6. 【游戏开发阅读列表2】动画(Anima2D、粒子、物理等)
  7. python-(6)常用的字符判断和转换以及开头结尾匹配
  8. CANoe.DiVa操作指南-运行环境搭建
  9. 多线程和事务之Workaround
  10. oracle业务关系sql,张瑞:Oracle与MySQL搭档满足业务需求