以编程方式访问 cProfile 数据

Programmatically accessing cProfile data

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

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

在此实例中,3.5 通过 subprocess.Popen() 调用 2.7 并捕获 stdoutstderr(分别用作数据和日志)。

我能够在 2.7 进程中 运行 cProfile,将生成的数据写入磁盘,并将其加载到 pStats。

此时,我可以 sort/filter 并打印到控制台。不幸的是,由于 stdout/stderr 已经在使用中,这没什么用。

我也希望有机会格式化、注入源代码片段等

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

该文档似乎没有说明除写入控制台之外的任何提取数据的方法。

.stats 属性 看起来很有希望,但只包含一个三元组数组,省略了很多信息。

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

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

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