開発者ガイド: サービスコールグラフの生成¶
このドキュメントでは、長時間実行される「aura_engine.py」の視覚的なコールグラフを生成するための堅牢でスレッドセーフな方法について説明します。 yappi プロファイラー (マルチスレッド サポート用) と gprof2dot を視覚化に使用します。
前提条件¶
必要なツールがグローバルまたは仮想環境にインストールされていることを確認してください。
# Required Python libraries for profiling
pip install yappi gprof2dot
# Required system library for visualization
# Linux: sudo apt install graphviz
ステップ 1: プロファイリング用にサービスを変更する¶
「yappi」プロファイラーを手動で起動し、中断(「Ctrl+C」)時にプロファイリングデータを正常に保存するには、「aura_engine.py」スクリプトを変更する必要があります。
「aura_engine.py」の主な変更点:
インポートとシグナル ハンドラー:
yappiをインポートし、yappi.stop()とstats.save(...)を呼び出すためのgenerate_graph_on_interrupt関数 (以前に実装したとおり) を定義します。開始/停止:
yappi.start()とsignal.signal(signal.SIGINT, ...)をif __name__ == "__main__":ブロック内に追加して、main(...)の実行をラップします。
ステップ 2: サービスの実行とデータの収集¶
変更したスクリプトを直接実行し、スレッド化された関数 (LanguageTool 修正など) を含むすべてのコア関数が確実に呼び出されるように、十分な時間 (10 ~ 20 秒など) データを処理します。
# Execute the service directly (do NOT use the pycallgraph wrapper)
python3 aura_engine.py
Ctrl+C を 1 回押して、シグナル ハンドラーをトリガーします。これにより、プロファイラーが停止し、生データが次の場所に保存されます。
\mathbf{yappi\_profile\_data.prof
ステップ 3: ビジュアル グラフの生成とフィルタリング¶
gprof2dot を使用して、生の pstats データを SVG 形式に変換します。 --include や --threshold などの高度なフィルタリング オプションは特定の環境ではサポートされていない可能性があるため、基本的な --strip フィルタを使用してパス情報をクリーンアップし、システム内部の混乱を軽減します。
視覚化コマンドを実行します:
python3 -m gprof2dot -f pstats yappi_profile_data.prof --strip | dot -Tsvg -o yappi_call_graph_stripped.svg
ステップ 4: ドキュメント作成 (手動トリミング)¶
結果の yappi_call_graph_stripped.svg (または .png) ファイルは大きくなりますが、すべてのスレッドを含む完全な実行フローが正確に含まれています。
ドキュメント化の目的で、画像を手動でトリミングして中央ロジック (10 ~ 20 個のコア ノードとその接続) に焦点を当て、リポジトリ ドキュメント用に焦点を当てた読みやすいコール グラフを作成します。
アーカイブ¶
変更した構成ファイルと最終的なコール グラフの視覚化は、ドキュメント ソース ディレクトリにアーカイブする必要があります。
アーティファクト |
場所 |
|---|---|
変更されたサービス ファイル |
|
最終的なトリミングされた画像 |
|
生のプロファイリング データ |
(オプション: 最終リポジトリのドキュメントから除外する必要があります) |
