python语法分析器
针对Python开发人员的新采样分析器工具Py-Spy无需收集代码,甚至无需重启运行的应用程序即可收集有关正在运行的Python程序的统计信息。
由开发商Ben Frederickson撰写的Py-Spy可以通过Python的pip
安装程序进行安装,并且可以在Linux和Windows上运行。 这使得它的安装变得简单,并且在大多数运行Python的环境中很有用。
Frederickson在他的项目笔记中说,大多数用于Python的性能分析系统都要求更改源代码以对应用程序进行检测。 除了修改源代码的麻烦之外,这还意味着配置文件代码必须与应用程序本身在同一进程中运行。 他写道:“这意味着使用这些事件探查器来调试生产服务中的问题通常并不安全,因为它们通常会对性能产生明显影响。”
![间谍](https://i-blog.csdnimg.cn/blog_migrate/42feae1fd14f2cc4929263337a1445e4.png)
正在运行的Python脚本的实时配置文件。 统计信息是从Python可执行文件中提取的,可以根据总体时间或所用时间的百分比进行排序。
Py-Spy采用了不同的方法。 它作为一个单独的进程运行,获取Python应用程序的进程ID进行分析,并在运行该平台的平台上使用内核级API读取应用程序的内存。 Py-Spy Frederickson声称,这样可以安全地在生产中使用。
生成的迹线可以转储到控制台,在控制台中,最常用的功能显示在列表中,也可以可视化为火焰图。 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)制定出了他所谓的“对其他人可能有用的非常可怕的hack”,将Py-Spy二进制文件捆绑在pip
安装包中。
Py-Spy本身的另一个限制是它无法收集有关在同一进程中运行的Python的C扩展的信息,而不能收集Python解释器本身。 但是,弗雷德里克森(Frederickson)指出,可能需要做一些额外的工作,例如使用libunwind
库。
python语法分析器