Python 中的统计分析

Statistical Profiling in Python

我想知道 Python 解释器在我的生产环境中的作用。

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

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

Although Python signal handlers are called asynchronously as far as the Python user is concerned, they can only occur between the “atomic” instructions of the Python interpreter. This means that signals arriving during long calculations implemented purely in C (such as regular expression matches on large bodies of text) may be delayed for an arbitrary amount of time.

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

即使解释器在某些 C 代码中停留几秒钟,我如何解决上述约束并获得堆栈跟踪?

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

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

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

我现在用py-spy with speedscope。这是一个非常酷的组合。

py-spy 在 Windows/Linux/macOS 上工作,可以自行输出火焰图并被积极部署,例如。 2019 年 10 月添加了子流程分析支持。