Junya Fukuda

Junya Fukuda

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

ダリア2#pyconjp_3中級日本語
11:50 - 12: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 における応用可能性

この題材を選んだ理由やきっかけ

業務にてPythonでシビアな性能が求められる非同期プログラミングを実装しています。業務のコードでは、実際に何が実行されているのか、どのタスクに依存関係があるのか、どこにどれだけの処理がかかっているのか、を把握するのが困難なケースが多くあります。

そんな中で今年アメリカのピッツバーグで開催されたPyCon US 2025でのトーク「Zoom, Enhance: Asyncio’s New Introspection Powers」に感銘を受けました。憧れのコア開発者がバナナの格好をして登壇している様子はとてもコミカルでふざけているような導入なのですが、紹介された機能は日々の課題を解決できる可能性の感じるアップデートでした。

このトークを通じて、asyncioで実行されているタスクの状態が把握できる可能性をお届けし、Pythonでの非同期プログラミングを始めるきっかけになれば良いなと思います。


オーディエンスが持って帰れる具体的な知識やノウハウ

  • さまざまなasyncioのプロファイル手法の例
  • 3.14の新機能である asyncio 「ps」「pstree」の概要
  • 「ps」「pstree」の具体的な使い方の可能性

オーディエンスに求める前提知識

  • Pythonの基本的な構文がわかる方
  • Python非同期を使ってみたい方
  • (nice to have) async def / await による非同期処理の基本構文理解
  • (nice to have) asyncio.taskgroup や asyncio.run の基礎的な利用経験
Junya Fukuda

Junya Fukuda

プロフィール

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