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。
工作原理:通过读取进程内存:
- linux: process_vm_readv
- osx: vm_read
- windows: ReadProcessMemory
在内存中,全局变量 PyInterpreterState 可以拿到解释器运行着的所有线程,再遍历每个线程拿到 PyFrameObject 中的调用栈。