世界を動かす技術を、日本語で。

Python 3.14が登場しました。どれくらい速いのでしょうか?

概要

  • 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.143.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.jsRust も高速
  • 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インタプリタ は現状汎用的な効果は限定的

  • PypyRust は依然として圧倒的な速度

  • 実アプリのパフォーマンスは、C拡張やI/O、アルゴリズム選択など多要素依存

    • ベンチマーク結果はあくまで「純粋なPythonコード」の一例
    • 今後のCPython開発JIT/FT技術の成熟 に期待

補足

  • 全テストスクリプト・ベンチマークフレームワーク はGitHubリポジトリで公開
  • 詳細な数値・グラフは元記事参照

Hackerたちの意見

ピトン、ハハ

オランダ語ではピジトンだね。

πthon

このバージョンは他の言語を軽く凌駕してるね。まあ…半周くらいだけど。

最初はPyPIとpypy、今はPiPyだね。

簡単で手軽なPythonのベンチマークを試したいなら、https://github.com/DarkStar1982/fast_langton_ant/ を見てみて。コマンドは「python3 server.py -s 10000000 -n」で。

ちょっと脱線するけど、この人には本当に感謝してる。彼が書いたFlaskのメガチュートリアルを信じて、自分の初めてのウェブサイトを立ち上げたんだ。その後、立ち上げ直前に、アプリの最も重要な部分であるフラグメントファイルをFlaskにパイプするところで、彼が俺のStack Overflowの質問に答えてくれて、その修正を実装したら、サイトがバズったんだ。記念にリンク貼っとくね。https://stackoverflow.com/a/34391304/4180276

いい話だね!君のプロフィールから推測すると、そのサイトはhttps://yout.com/だったんじゃないかな。まだFlask使ってる?

この話をシェアしてくれてありがとう。親切にして、見知らぬ人を助けることがどれだけ大事かを示してるね。いつか誰かのために同じことができるといいな :)

あなたのおかげでいい一日になりました、サー。 :)

彼にお金を渡した?

いい話だけど、その状況で本当に命の危険があったの?

Hacker Newsで議論の続きを見る