三天前,Python 軟件基金會(PSF)正式發布了 Python 3.14.0。這是一次里程碑式的更新,帶來了多個開發者期待已久的新特性,包括自由線程(支持、子解釋器(Subinterpreters)引入、結構化模式匹配增強,以及對異步編程機制的深度優化等。
從功能上看,3.14 的變化可謂誠意十足。但許多開發者最關心的,依然是那句老問題——“它到底有多快?”
為此,軟件工程師 Miguel 對新版 Python 進行了一輪非官方性能測試,希望看看這次升級在速度上究竟能帶來多大提升。
不過,他也在測試開頭就打了“預防針”:
“在我展示結果之前,必須提醒大家,這類基準測試(benchmark)其實很容易產生誤導。運行這些測試當然很有趣,但要想僅靠幾個簡單腳本就準確描繪出像 Python 解釋器這樣復雜系統的性能全貌,幾乎是不可能的。”
Miguel 表示,他設計的測試全部運行純 Python 代碼,刻意避免任何第三方依賴,尤其排除了所有用 C 編寫的函數或擴展模塊。
這樣做的原因很簡單:原生 C 代碼在不同 Python 版本間的性能變化通常不大,因此加入它們反而會模糊結果。
當然,這樣的測試也有明顯局限。
現實中的 Python 應用往往是混合體——既包含大量純 Python 邏輯,也調用 C、C++ 或 Rust 編寫的底層模塊。
因此,這種“純 Python 環境”下的基準結果,更像是對解釋器性能的“顯微鏡觀察”,并不完全等同于真實場景下的運行表現。
Miguel 也再次強調:
“你可以把這份測試當作一個參考點,但千萬別把它當作 Python 性能的最終結論。”
接下來,我們將看看完整的測試。

測試矩陣
這次的基準測試涵蓋了一個五維度的測試矩陣,具體如下:
1. 6 個 Python 版本,以及 Pypy、Node.js 和 Rust 的最新版本:
-
CPython 3.9、3.10、3.11、3.12、3.13、3.14
-
Pypy 3.11
-
Node.js 24
-
Rust 1.90
2. Python 解釋器模式(共 3 種):
-
Standard(標準模式)
-
JIT(即時編譯模式):僅適用于 CPython 3.13 及以上版本
-
Free-threading(自由線程模式):同樣僅適用于 CPython 3.13+
3. 測試腳本(共 2 個):
-
fibo.py:用于計算斐波那契數列,重點考察遞歸性能。
-
bubble.py:使用冒泡排序算法對隨機生成的數字列表進行排序,強調迭代操作但不涉及遞歸。
4. 線程模式(共 2 種):
-
單線程(Single-threaded)
-
多線程(4 個獨立線程同時運行計算任務)
5. 測試設備(共 2 臺):
-
一臺運行 Ubuntu Linux 24.04 的 Framework 筆記本(Intel Core i5 CPU)
-
一臺運行 macOS Sequoia 的 Mac 筆記本(Apple M2 CPU)
你可能會覺得在測試里加入 Node.js 和 Rust 看起來有點奇怪。Miguel 也承認這可能確實有點“跨界”,但他表示,自己將兩個 Python 測試腳本應用程序分別移植成了 JavaScript 和 Rust 版本,目的是為了在 Python 生態之外也能得到一組性能參考值,幫助更直觀地看清 Python 的表現處于什么水平。

測試腳本
下面是 fibo.py 的主要邏輯:
def fibo(n):if n <= 1:return nelse:return fibo(n-1) + fibo(n-2)
經過多次實驗,Miguel 發現使用這段函數計算第 40 個斐波那契數,在他的兩臺筆記本上大約需要幾秒鐘。
因此,后續所有測試結果都基于這個參數設置。
接下來是 bubble.py 中的排序函數:
def bubble(arr):n = len(arr)for i in range(n):for j in range(0, n-i-1):if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]return arr
在這個測試腳本中,Miguel 同樣通過多次嘗試來確定合適的數組大小,使得整個排序過程能在幾秒鐘內完成。最終,其選擇使用一個包含 1 萬個隨機生成數字的列表作為測試數據。
需要說明的是,這兩個例子并不是高性能代碼的示范。如果目標是追求運行速度,還有許多更高效的實現方式。但這次基準測試的目的并非要寫出最快的算法,而是要比較不同 Python 解釋器執行相同代碼的表現差異。
Miguel 解釋道,他之所以選用這兩個函數,是因為它們在編碼風格上形成對比:一個是遞歸實現(fibo),另一個是迭代實現(bubble),這樣能更全面地反映解釋器在不同類型代碼下的運行特性。
整個基準測試框架會讓每個測試函數重復運行三次,并取三次結果的平均值作為最終成績