概要
- Python 3.14のリリースを受け、主要なベンチマークを再実施
- 純粋なPythonコードを使い、他言語(Node.js、Rust)とも比較
- JIT・Free-Threadingバリアントの効果も検証
- シングルスレッド・マルチスレッド両方のパフォーマンスを測定
- 結果や考察の要点を簡潔にまとめて解説
Python 3.14ベンチマーク再検証
- 2024年11月の「Is Python Really That Slow?」記事の続編として、 Python 3.14 リリース直後に再ベンチマーク実施
- CPython 3.9~3.14、Pypy 3.11、Node 24、Rust 1.90 を対象
- シングルスレッド/4スレッド、 2台の異なるPC(Linux/Intel、macOS/Apple Silicon) で測定
- テスト内容
- fibo.py :再帰でFibonacci数列を計算
- bubble.py :バブルソートで乱数配列を整列
- 純Pythonのみ を使用し、C拡張などは除外
ベンチマークの注意点
- 一般的なベンチマークは誤解を招きやすい ため、あくまで参考値
- 実際のアプリケーションはC/C++/Rust等のネイティブコードも多用
- 今回の結果は「純粋なPythonコード」に限った 一データポイント
シングルスレッドFibonacciベンチマーク
- Python 3.14 は 3.13比で約27%高速化 (3.13は3.14の約79%の速度)
- 3.11で大きな性能ジャンプ、それ以前は「かなり遅い」印象
- Pypy 3.11 は3.14の約5倍高速、 Rust はさらに圧倒的
- JIT/Free-Threadingバリアント (3.13/3.14)では、JITは再帰関数に効果なし、FTはシングルスレッドだとやや遅いが差は縮小
シングルスレッドバブルソートベンチマーク
- Python 3.14 がCPythonで最速、ただし3.11との差はFibonacciより小さい
- Pypy 3.11 は3.14の約18倍高速、 Node.js や Rust も高速
- JITバリアントはLinuxでやや速いが、全体の差は小さい
- FTバリアントもやや遅いが、3.14で差が縮小
マルチスレッドFibonacciベンチマーク
- 標準インタプリタ ではスレッド数増加でもスケーリングしない(GILのため)
- Free-Threadingインタプリタ (GIL解除)は3.13で2.2倍、3.14で3.1倍高速化
- JITバリアント は特に効果なし
- Pypy も高速だが、GILの制約は同様
マルチスレッドバブルソートベンチマーク
- 各スレッドが独立してバブルソートを実行
- Free-Threadingインタプリタ で大幅な高速化を確認
- 標準・JITバリアントはスレッド数増加の恩恵を受けにくい
結論・考察
-
Python 3.14 はパフォーマンスが着実に向上
-
Free-Threadingインタプリタ はマルチスレッドCPU負荷タスクで大きな可能性
-
JITインタプリタ は現状汎用的な効果は限定的
-
Pypy や Rust は依然として圧倒的な速度
-
実アプリのパフォーマンスは、C拡張やI/O、アルゴリズム選択など多要素依存
- ベンチマーク結果はあくまで「純粋なPythonコード」の一例
- 今後のCPython開発 と JIT/FT技術の成熟 に期待
補足
- 全テストスクリプト・ベンチマークフレームワーク はGitHubリポジトリで公開
- 詳細な数値・グラフは元記事参照