概要
- CPython 3.14.0b1 のリリースと PyCon 2025 開催が、free-threaded Python実現の重要な節目となることを説明。
- Quansightチームが free-threadedビルド の実験的利用を現実のワークフローで可能にした経緯を紹介。
- GIL無効化 によるパッケージの課題やエコシステム全体の現状を整理。
- 主要パッケージやコアモジュールへの スレッドセーフ化対応 の進捗を列挙。
- 今後の課題・貢献方法・コミュニティへの参加を呼びかける。
Free-threaded Pythonの1年:Quansightとエコシステム対応の最前線
Free-threaded Pythonの意義と課題
- CPython 3.14.0b1 リリースと PyCon 2025 開催は、free-threaded Python実現に向けた重要な節目となることを確認。
- Quansightチームは、 free-threadedビルド を複雑な依存関係を持つ実運用ワークフローで試験的に利用可能にすることに貢献。
- free-threaded Python により、マルチコアCPUやGPUの計算資源を最大限活用できることを強調。
- GIL有効時 は並列アルゴリズム活用に制約があり、threadingモジュールの利用は限定的であることを説明。
- multiprocessing はプロセス生成やデータコピーコストが高く、マルチスレッドプログラムの利点が活かせないことを指摘。
- ネイティブコードを含むパッケージは、 free-threadedビルド 対応にあたりスレッドセーフ性の監査が必須となることを強調。
- GIL無効化 はCPythonインタプリタの構造的な大改修を伴い、既存パッケージの構造的な修正も必要となることを説明。
- C拡張内のグローバル状態利用は、 GIL無効時 にはデータ競合を引き起こす危険があることを確認。
- threadingモジュール 利用時にも理論上はスレッドセーフ問題が発生しうるが、GILにより多くは表面化しなかったことを補足。
- free-threadedビルド ではこうした問題の顕在化と修正が急務となることを明示。
主な成果と対応パッケージ
- QuansightとMeta Pythonランタイムチームは、多数のパッケージ・プロジェクトで free-threaded Python対応 を推進。
- meson, meson-python, setup-python GitHub Actions, packaging, pip, setuptoolsなどの ビルド・ワークフロー系ツール 対応。
- Cython, pybind11, f2py, PyO3などの バインディング生成ツール 対応。
- NumPy, SciPy, PyArrow, Matplotlib, pandas, scikit-learn, scikit-imageなどの PyData基盤パッケージ 対応。
- Pillow, PyYAML, yarl, multidict, frozenlistなどの PyPI主要依存パッケージ 対応。
- 現在もCFFI, cryptography, PyNaCl, aiohttp, SQLAlchemy, grpcio, safetensors, tokenizersなど 未対応パッケージ への対応を進行中。
- QuansightチームのCPythonコア開発者は、以下の 主要改善 に貢献:
- warningsモジュールの デフォルトスレッドセーフ化 (free-threadedビルド)、GIL有効時もオプションで有効化可能。
- asyncioの スレッドセーフ問題修正 と、スレッドプールランナー利用時の並列スケーリング性能向上。
- ctypesモジュールの スレッドセーフ化刷新。
- free-threadedガーベジコレクタの 性能向上。
- deferred reference countingスキームの実装支援。
- adaptive specializing interpreterの最適化、free-threaded CPython 3.14の シングルスレッド性能向上。
- 多数のバグ修正・スレッドセーフ化改善を実施。
- free-threaded Python対応ガイド を執筆し、今後のパッケージ対応の参考資料として公開。
エコシステムの現状と進捗
- 1年前の Python 3.13.0b1 時点では、free-threadedビルドでほぼ全てのパッケージがビルド不可状態だったことを説明。
- 問題の多くは 根本的な障害 ではなく、デフォルトオプションや軽微な前提の破綻によるものだったことを指摘。
- パッケージメンテナやコミュニティと連携し、多数の問題を解消し、現状は大幅に改善されたことを報告。
- Cython 3.1.0 のリリースによる公式free-threaded対応が、ビルド問題の大きな解決策となったことを説明。
- 依然として 未対応のコンパイル済みコード含有パッケージ への対応を継続中。
- 進捗は 手動更新のステータステーブル やHugo van Kemenadeの 自動トラッカー で確認可能。
現在の課題と今後の展望
- free-threaded Pythonビルド は実験利用に十分な状態であり、実際のワークフローでの性能・バグ報告が求められていることを呼びかけ。
- multiprocessing利用時のコスト削減や 並列性能向上 が期待できる一方、多くのパッケージで スレッドセーフ監査 が必要。
- 多くのPythonライブラリは ミュータブルなデータ構造 を提供しており、スレッドセーフ・マルチスレッド性能に関するドキュメントが不十分であることを指摘。
- 大規模なレガシーパッケージでは、対応のためのリソースや知見が不足しているケースが多いことを課題として挙げる。
- コミュニティ全体で依存ツリーの問題を把握し、 持続可能な保守体制 構築を目指すことの重要性を強調。
貢献方法とコミュニティへの参加
- free-threadedガイド のコントリビューションガイド参照を推奨。
- Quansight-Labs GitHub orgの free-threaded-compatibilityリポジトリ でエコシステム全体の課題をトラッキング・ガイド執筆を実施中。
- コミュニティDiscord も開設し、free-threadedビルド対応の議論・協力を促進。
- 興味がある場合はぜひ参加・協力することを推奨。
- PyConでの 発表 も予定しており、YouTube録画が今後の学習資源となることを期待。
- free-threadedビルド がPython言語の未来であり、今後数年で日常的に使われるパッケージ群の性能向上に寄与することを展望。