针对Python开发人员的新采样分析器工具Py-Spy无需收集代码,甚至无需重启运行的应用程序即可收集有关正在运行的Python程序的统计信息。
由开发商Ben Frederickson撰写的Py-Spy可以通过Python的pip
安装程序进行安装,并且可以在Linux和Windows上运行。 这使得它的安装变得简单,并且在大多数运行Python的环境中很有用。
[ 什么是Python? 您需要知道的一切 。 •教程: 如何开始使用Python 。 • 每个Python开发人员都有6个基本库 。 • 为什么应该使用Python进行机器学习 。 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]
Frederickson在他的项目笔记中说,大多数用于Python的性能分析系统都要求更改源代码以对应用程序进行检测。 除了修改源代码的麻烦之外,这还意味着配置文件代码必须与应用程序本身在同一进程中运行。 他写道:“这意味着使用这些事件探查器调试生产服务中的问题通常并不安全,因为它们通常会对性能产生明显影响。”
Py-Spy采用了不同的方法。 它作为一个单独的进程运行,获取Python应用程序的进程ID进行分析,并在运行该平台的平台上使用内核级API读取应用程序的内存。 Frederickson声称,这样,Py-Spy可以安全地用于生产中。
生成的迹线可以转储到控制台,在控制台中,最常用的功能显示在列表中,也可以可视化为火焰图。 Py-Spy还提供统计信息,显示一个进程在Python解释器的全局解释器锁(GIL)上等待的时间。 GIL强制执行线程安全的内存管理,但要以多线程性能为代价,因此Py-Spy可以提供一些角度来了解GIL对任何应用程序的影响。
Py-Spy使用Rust编写的二进制文件来完成其许多魔术。 捆绑到Python应用程序中的大多数二进制文件都是用C或C ++编写的,或者是用Python的Cython变体(可编译为本地C)编写的。但是涌现了一些项目,以简化 编写与Python交互的Rust应用程序的过程,反之亦然 ,以利用Rust的内存安全性和本机速度。
现在,以这种方式使用Rust有一个缺点:Python的setuptools
系统尚未集成构建和捆绑Rust二进制文件的支持。 通常,在安装Py-Spy的系统上需要Rust编译器。 弗雷德里克森(Fredericksen)提出了他所谓的“一个非常可怕的骇客技巧,对其他人可能有用”,将Py-Spy二进制文件捆绑在pip
安装包中。
Py-Spy本身的另一个限制是它无法收集有关在同一进程中运行的Python的C扩展的信息,而不能收集Python解释器本身。 但是,弗雷德里克森(Frederickson)指出,可能需要做一些额外的工作,例如使用libunwind
库。
请发表评论