PyCon JP 2025 Logo
広島国際会議場
JPEN
Junya Fukuda

Junya Fukuda

タスクって今どうなってるの?3.14の新機能 asyncio ps と pstree でasyncioのデバッグを

ダリア2日本語
02:50 - 03:2030min
DAY 2
09/27
SAT

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を用いた柔軟な内部状態の可視化手法をご紹介します。


トーク詳細 / Description

非同期プログラミングを可能にする標準ライブラリ asyncio は、近年のアップデートにより高レベルAPIが充実し、タスクの管理やキャンセルも柔軟に扱えるようになりました。これにより、実装の難易度は大きく下がっています。

しかし実際の開発現場では、「思ったようにパフォーマンスが出ない」といった問題にしばしば直面します。このようなケースではプロファイリングが有効ですが、asyncioにおいて有効な標準手法はまだ確立されていません。また、状態確認のために余計なコストがかかることも、導入の障壁となっています。

こうした課題を解決する手段として期待されているのが、asyncio ps や pstree です。これによってasyncioを強化する強力なピースが追加されました。本トークでは、これらの基本的な使い方から、実際に業務で活用できるのかどうかまでを、コード例を交えながらご紹介します。

予定稿

  • Python asyncio と既存のプロファイラの紹介 10分

    • pyspy
    • aiomonitor
    • IDE でのプロファイリング
  • ps, pstreeの概要 10分

    • なぜこの機能が生まれたのか
    • taskの新しい属性「task_awaited_by」
    • 新しいAPI「capture_call_graph」「print_task_call_graph」
  • ps, pstreeで何ができるのか 10分

    • Python Web Frameworkとの連携
    • グローバルバックエンドである anyio / trio における応用可能性
Junya Fukuda

Junya Fukuda

プロフィール

GROOVE X株式会社所属。Pythonを中心としたWebシステム開発にフルスタックエンジニアとして従事。現職にて、愛する力をはぐくむ家族型ロボット「Lovot(らぼっと)」の意思決定エンジンの開発を行う。PyCon JP、DjangoCongress JP、EuroPython、PyConUSなどにて登壇。ビールが好き。家庭菜園に憧れている。