Junya Fukuda
Python標準ライブラリである非同期プログラミング用の「asyncio」には、プロファイルの難しさという課題があります。何がどこに依存しているのか、どこにどれだけ負荷がかかっているのか、といった情報をゼロコストで把握することが、言語仕様上困難でした。ただでさえ難しい印象のある並行処理をさらに難しくしてしまう一因として、プロファイリングのしづらさがあると感じています。
この課題を解決する新機能が、Python 3.14で追加される「asyncio」の「 ps」「pstree」です。
2025年10月にリリース予定のPython 3.14では、新しいAPI「capture_call_graph」「print_task_call_graph」およびタスクの新属性「task_awaited_by」が追加され、asyncioの実行中タスクの状態を可視化できるようになります。これにより、余計な負荷をかけずに、より容易に内部状態を把握することが可能になります。
本トークでは、実際のコードを交えながら、asyncioを用いた柔軟な内部状態の可視化手法をご紹介します。
非同期プログラミングを可能にする標準ライブラリ asyncio は、近年のアップデートにより高レベルAPIが充実し、タスクの管理やキャンセルも柔軟に扱えるようになりました。これにより、実装の難易度は大きく下がっています。
しかし実際の開発現場では、「思ったようにパフォーマンスが出ない」といった問題にしばしば直面します。このようなケースではプロファイリングが有効ですが、asyncioにおいて有効な標準手法はまだ確立されていません。また、状態確認のために余計なコストがかかることも、導入の障壁となっています。
こうした課題を解決する手段として期待されているのが、asyncio ps や pstree です。これによってasyncioを強化する強力なピースが追加されました。本トークでは、これらの基本的な使い方から、実際に業務で活用できるのかどうかまでを、コード例を交えながらご紹介します。
Python asyncio と既存のプロファイラの紹介 10分
ps, pstreeの概要 10分
ps, pstreeで何ができるのか 10分
プロフィール
GROOVE X株式会社所属。Pythonを中心としたWebシステム開発にフルスタックエンジニアとして従事。現職にて、愛する力をはぐくむ家族型ロボット「Lovot(らぼっと)」の意思決定エンジンの開発を行う。PyCon JP、DjangoCongress JP、EuroPython、PyConUSなどにて登壇。ビールが好き。家庭菜園に憧れている。