以编程方式访问cProfile数据

时间:2018-03-06 23:20:38

标签: python profiling cprofile pstats

我需要捕获一些python性能分析数据并生成报告。

虽然这个组件的大部分都运行Python 3.5,但为了支持几个遗留模块,我们仍然有部分系统运行2.7。

在这种情况下,3.5通过subprocess.Popen()调用2.7并捕获stdoutstderr(分别作为数据和日志)。

我可以在2.7进程中运行cProfile,将结果数据写入磁盘,然后将其加载到pStats中。

此时,我可以对控制台进行排序/过滤和打印。不幸的是,由于stdout / stderr已在使用中,因此没有多大帮助。

我也更喜欢格式化,注入源代码片段等等。

所以我需要以编程方式查询pStats类,构建一个合适的报告,然后将其存储在我们的消息系统中。

该文档似乎没有表明任何方式提取其他写入控制台的数据。

.stats属性看起来很有前途,但只包含一个3元组数组,它​​们省略了很多信息。

如何以编程方式浏览pStats中的数据?

具体来说,我想提取至少:

  • 源文件/行号
  • 累计时间
  • 独家时间

1 个答案:

答案 0 :(得分:1)

严格来说,这不是一个完整的答案,但是您可能想查看SnakeViz库(我不隶属于该库)。他们对cProfile输出进行了可视化处理,这大概意味着它们具有您可能会劫持的解析器。