开发人员指南:生成服务调用图

本文档描述了用于生成长期运行的“aura_engine.py”的可视化调用图的稳健、线程安全的方法。我们使用“yappi”分析器(用于多线程支持)和“gprof2dot”进行可视化。

先决条件

确保您已在全局或虚拟环境中安装了必要的工具:

代码_块_0

第 1 步:修改分析服务

必须修改“aura_engine.py”脚本以手动启动“yappi”分析器并在中断时正常保存分析数据(“Ctrl+C”)。

aura_engine.py 中的主要更改:

  1. 导入和信号处理程序: 导入 yappi 并定义 generate_graph_on_interrupt 函数(如之前实现的)以调用 yappi.stop()stats.save(...)

  2. 开始/停止:if __name__ == "__main__": 块中添加 yappi.start()signal.signal(signal.SIGINT, ...) 来包装 main(...) 的执行。

第 2 步:运行服务并收集数据

直接运行修改后的脚本,并允许其处理数据足够的时间(例如 10-20 秒),以确保调用所有核心函数,包括线程函数(如 LanguageTool 校正)。

代码_块_1

Ctrl+C 一次即可触发信号处理程序。这将停止分析器并将原始数据保存到:

\mathbf{yappi\_profile\_data.prof

步骤 3:生成和过滤可视化图表

我们使用“gprof2dot”将原始“pstats”数据转换为 SVG 格式。由于我们的特定环境可能不支持“–include”和“–threshold”等高级过滤选项,因此我们使用基本的“–strip”过滤器来清理路径信息并减少系统内部的混乱。

执行可视化命令:

代码_块_2

步骤 4:文档(手动裁剪)

生成的“yappi_call_graph_stripped.svg”(或“.png”)文件会很大,但它准确地包含完整的执行流程,包括所有线程。

出于文档目的,手动裁剪图像以重点关注中央逻辑(10-20 个核心节点及其连接),从而为存储库文档创建重点突出且可读的调用图。

归档

修改后的配置文件和最终的调用图可视化应存档在文档源目录中:

神器

地点

修改后的服务文件

doc_sources/profiling/aura_engine_profiling_base.py

最终裁剪图像

doc_sources/profiling/core_logic_call_graph.svg

原始分析数据

(可选:应从最终存储库文档中排除)

yappi_call_graph