Py-Spy - A sampling profiler for Python programs

查看原文

Py-Spy 这个工具是个 Python Profiler,它可以在不重启 Python 程序的前提下得到耗时函数及其调用时间,并将其以 top-like 的形式展示出来。

它的特色是:低 overhead,用 Rust 写的核心部分,不需要侵入 Python 进程。无侵入这个特性也是它有别于标准库甚至其他 profiler 的好特性。你不需要修改任何一行项目代码就能用它。pyflame 倒是可以,不过尚不支持 Python 3.7 及非 Linux 的 OS。

工作原理:通过读取进程内存:

在内存中,全局变量 PyInterpreterState 可以拿到解释器运行着的所有线程,再遍历每个线程拿到 PyFrameObject 中的调用栈。