Py-spy是一款强大的Python程序采样分析器,它允许你无需重启程序或修改代码就能可视化你的Python程序的运行时间消耗。相比其他分析工具,Py-spy具有极低的开销,因为它使用Rust编写,速度极快,并且不会在与被分析的Python程序相同的进程中运行。这意味着Py-spy可以安全地用于生产环境的Python代码。
Py-spy是什么?
Py-spy是一个采样分析器,这意味着它定期从你的Python程序中抽取样本,以了解你的程序在哪些部分花费了最多时间。
不同于插入式分析器,Py-spy作为一个独立的进程运行,通过系统调用读取目标Python进程的内存,从而获得其调用栈信息,不会干扰目标程序的运行。这使得它成为分析生产环境代码的理想工具。
它支持Linux、macOS、Windows和FreeBSD等多种操作系统,并兼容大多数版本的CPython解释器。
Py-spy能做什么?
Py-spy主要提供了三个命令:record
、top
和dump
,分别用于生成性能分析报告、实时监控程序性能以及获取当前调用栈信息。
Py-spy如何安装?
Py-spy的安装非常简单,可以通过pip安装:
pip install py-spy
Py-spy使用方法详解
record
命令:生成性能分析报告
record
命令用于生成程序运行的性能分析报告。你可以指定输出文件格式(例如SVG用于火焰图,speedscope或raw数据),采样率等参数。
# 使用PID分析正在运行的进程
py-spy record -o profile.svg --pid 12345
# 分析新启动的Python程序
py-spy record -o profile.svg -- python myprogram.py
生成的火焰图可以直观地展示程序的性能瓶颈。
top
命令:实时监控程序性能
top
命令类似于Unix的top
命令,它会实时显示程序中占用时间最多的函数。
# 使用PID分析正在运行的进程
py-spy top --pid 12345
# 分析新启动的Python程序
py-spy top -- python myprogram.py
该命令会持续更新显示结果,帮助你快速定位性能瓶颈。
dump
命令:获取当前调用栈
dump
命令用于获取程序当前的调用栈信息,这对于调试死锁或其他运行时问题非常有用。
# 使用PID分析正在运行的进程
py-spy dump --pid 12345
常见问题解答
Py-spy文档中包含了大量常见问题的解答,例如如何处理子进程、如何避免暂停程序、如何处理权限问题等。这些问题解答涵盖了Py-spy使用的各个方面,可以帮助用户更好地理解和使用该工具。例如,在Docker或Kubernetes环境中使用Py-spy需要额外配置才能获得必要的权限。
总结
Py-spy是一款功能强大且易于使用的Python性能分析工具。其低开销、无需修改代码以及多平台支持等特性,使其成为调试和优化Python程序的理想选择。
项目地址:https://github.com/benfred/py-spy