Python中的统计分析

时间:2018-02-28 13:22:31

标签: python profiling usage-statistics

我想知道Python解释器在我的生产环境中正在进行。

前段时间我写了一个名为live-trace的简单工具,它运行一个守护程序线程,每隔N毫秒收集一次堆栈跟踪。

但是解释器本身的信号处理有一个缺点:

  

尽管就Python用户而言,Python信号处理程序是异步调用的,但它们只能出现在Python解释器的“原子”指令之间。这意味着在长时间计算过程中到达的信号纯粹用C实现(例如大型文本上的正则表达式匹配)可能会延迟一段时间。

来源:https://docs.python.org/2/library/signal.html

即使解释器在某些C代码中存在几秒钟,我怎么能解决上面的约束并得到一个堆栈跟踪呢?

相关:https://github.com/23andMe/djdt-flamegraph/issues/5

3 个答案:

答案 0 :(得分:5)

你试过Pyflame吗?它基于ptrace,因此它不应受CPython信号处理细微差别的影响。

答案 1 :(得分:4)

我现在将py-spyspeedscope一起使用。这是一个非常酷的组合。

speedscope-view-of-py-spy-data

py-spy可在Windows / Linux / macOS上运行,可以自行输出火焰图,并且可以主动部署。子流程分析支持已于2019年10月添加。

答案 2 :(得分:1)

也许Brendan Gregg的perf-tool可以提供帮助