Python3 vs. Python2,誰將是性能之王?

Python3 vs. Python2,誰將是性能之王?

引言:

Python 是一種極具可讀性和通用性的編程語言。Python 這個名字的靈感來自於英國喜劇團體 Monty Python,它的開發團隊有一個重要的基礎目標,就是使語言使用起來很有趣。Python 易於設置,並且是用相對直接的風格來編寫,對錯誤會提供即時反饋,對初學者而言是個很好的選擇。

如果你是Python初學者,文末提供Python資料和教程可下載看看。

Python 是一種多範式語言,也就是說,它支持多種編程風格,包括腳本和麵向對象,這使得它適用於通用目的。隨著越來越多地在工業中,被諸如聯合太空聯盟(NASA 的主要飛機支持承包商)和工業光魔(VFX 和盧卡斯影業的動畫工作室)等組織使用,Python 為那些尋求額外編程語言的人提供了巨大的潛力 。

開發於 20 世紀 80 年代末並於 1991 年首次被髮布,Python 的創始人是 Guido van Rossum ,而他現在仍然活躍在社區中。被認為是 ABC 編程語言的繼承者,Python 的第一版就已經包括異常處理,函數和帶繼承的類。當一個重要的被稱為 comp.lang.python 的 Python 新聞組在 1994 年形成時,Python 的用戶基礎不斷增長,這為 Python 成為開源開發中最受歡迎的編程語言之一鋪平了道路。

哪個版本的 Python 最快?

Python 3 真的比 Python 2 慢嗎?

Python 3 最快的版本是哪個?

......

當然,這些問題由多種因素決定,其中的主要的因素是什麼呢?我們又如何為自己的應用尋找最快的 Python 版本呢?帶著這些問題,Hackermoon 上一位叫 Anthony Shaw 的作者為我們做了一些測試。

Anthony Shaw :Dimension Data 的 Talent 集團總監,Python 軟件基金會成員,Apache 基金會成員

以下對作者原文的翻譯:

01、使用 Python 性能測試套件

正如之前我在 speed.python.org 網站提到的,Python 核心開發團隊非常重視性能問題,這對於比較官方基準和 CPython 版本非常有用。

  1. 如圖,測試結果很難直觀讀取
  2. 其中不包含 PyPy
Python3 vs. Python2,誰將是性能之王?

你可以通過執行 pip install performance 命令來下載測試套件,然後執行如下命令:

pyperformance run --python={chosen_python_runtime} -o my_results.json

該命令會針對 Python 的目標版本多次運行一系列“實際”應用程序,並記錄測試結果,取其平均值。

本文我對以下官方版本進行了測試:

  • Python 2.7.10
  • Python 3.4.4
  • Python 3.5.4
  • Python 3.6.1
  • Python 3.7 beta 2(譯者注:作者進行測試時 Python 3.7 版本還未正式發佈,beta 2 性能與正式版非常接近,同樣具有參考價值。Python 3.7 正式發佈內容請看這裡)
  • 同時還測試了 PyPy(5.6)和 PyPy 3(5.10.0)。

02、測試結果

我根據這套測試用例進行了測試,你也可以根據自己的情況自己編寫一套測試。

我編寫了一個簡單的腳本,來獲得性能數據文,並將它們繪製成了圖表。腳本代碼你可以在這裡找到:

  • https://gist.github.com/tonybaloney/4e8e45f9128e9eb6e4f36c73ba5e5574

所有圖表都以秒為單位,數值越低,表示性能越好。

完整的測試結果及圖表展示可請參閱:

  • https://github.com/tonybaloney/performance_testing/tree/master/png

03、渲染 HTML 模板

django_html 測試將使用 Django 模板渲染引擎來構建一個 150x150 的 HTML 表格。 它利用了 Django 引擎的 Content 和 Template 類。

Python3 vs. Python2,誰將是性能之王?

如圖所示,Python 3.7 比 Python 2.7 快 1.19 倍,但除此之外,其他 Python 3 版本都沒有 Python 2.7 快。該結果與 speed.python.org 網站的測試結果一致。

PyPy 的測試結果顯示,PyPy 比 CPython 的任何 Python 版本都快,PyPy 3 比 PyPy 慢兩倍。Django 2.0 及更高版本已決定放棄對 Python 2 的支持,因此 PyPy 將不再與 Django 2 兼容。

04、啟動時間測試

該部分測試解釋器的啟動時間

Python3 vs. Python2,誰將是性能之王?

如圖所示,Python 2.7 是所有測試版本中啟動速度最快的。

注:此處暫不討論 PyPy 的測試結果,文末再談。

05、加密測試(Crypto):crypto_paes

Python3 vs. Python2,誰將是性能之王?

在這個測試中,Python 2 的速度明顯快於 Python 3,因為 Crypto 要求大量數字運算,而 Python 3 沒有 32 位整數類型,只有一個長整型(long integer)。

同樣差距比較明顯的是,PyPy 3 比 PyPy 慢 5 倍。

06、算法測試:n-queens

Python3 vs. Python2,誰將是性能之王?

結果顯示,在 CPython 系列中,Python 3.7 性能最佳。此外,PyPy 3 和 PyPy 測試結果比較接近,PyPy 小勝。

07、浮點運算測試

“浮點”基準測試需要人工創建繁重的浮點運算應用程序,在這裡我們通過 math.cos(),math.sin() 和 math.sqrt() 函數創建,總共創建 10 萬個浮點對象。

Python3 vs. Python2,誰將是性能之王?

PyPy 非常適合浮點運算,在大量的數字運算、可預測的類型和方法以及循環上展現了非常優秀的性能。Python 3.7 具有新的方法能快速調用操作碼,該操作碼正在此測試中剛好用上,表現佳。

08、正則表達式測試

在這項測試中,我選用了 50 個最受歡迎的網頁,並記錄了所有正則表達式的操作。 每個操作都被賦予權重,該權重是根據頁面流行度的估計以及在加載每個頁面時執行的次數來計算的。 最後,數據中的字母使用 ROT13 進行編碼,其方式不會影響正則表達式與輸入的匹配程度。

Python3 vs. Python2,誰將是性能之王?

PyPy 的測試結果讓人大跌眼鏡,不知道它都經歷了些什麼......

補充:後來發現是 PyPy 性能出了問題,PyPy 開發團隊後來看到了這項測試結果,花了幾個小時把性能問題修復了

Python3 vs. Python2,誰將是性能之王?

09、Python 3 比 Python 2 快嗎?

綜上測試所述,答案是 Yes!雖然也有幾項測試結果顯示 Python 3 比 Python 2 慢:

  • 加密測試:Python 3 的比 Python2 慢 1.35 倍(原因在上文已做解釋)
  • 啟動時間測試:Python 3 比 Python 2 慢 1.39 倍

但從整體結果來看,Python 3 更快。CPython 核心開發團隊曾表示,啟動速度問題是他們在 3.8 和 3.9 版本中著重要解決的問題。

10、PyPy 很快,我要使用它嗎?

PyPy 有 JIT 及時編譯器,在執行可預測的重複性任務時非常高效,而 Python 性能測試需要多次運行同一段代碼來保證準確性,因此,PyPy 面對這樣測試性能,表現比 CPython 更佳。

但是,PyPy 的 JIT 編譯器的顯著缺點就是啟動成本高,並且,許多 C 語言擴展程序缺乏兼容性。另外,由於 PyPy 是用 Python 編寫的,許多模板在 PyPy 中無法工作,使用者需要時常進行檢查。

PyPy 也同樣需要面對從 Python2 向 Python3 轉變的問題。PyPy3 還不太穩定,PyTest 就已經放棄了對 PyPy3 的支持。

11、其他注意事項

作為一個在 Python 上開始的新手程序員,或作為一個有經驗的程序員開始接觸 Python 語言,你會考慮在語言學習中你希望實現什麼。

如果你希望只是在沒有設定項目的情況下學習,你最可能考慮到 Python 3 將得到後續支持和開發,而 Python 2.7 不會。

但是,如果您計劃加入已有的項目,則你最有可能希望瞭解該團隊正在使用的 Python 版本,還有如果項目使用的軟件包支持不同版本,不同版本應該如何與舊版代碼庫進行交互,以及項目的實施細節。

如果你正開啟了一個項目,你會想,調查哪些包可以使用,以及這些包和哪個版本的 Python 是兼容的。如上所述,儘管早期版本的 Python 3與為 Python 2 版本構建的庫的兼容性較低,但是許多庫已移植到 Python 3,或致力於在未來四年這樣做。

12、結論

Python 在所有官方版本測試中表現最佳,PyPy 在解釋器測試的表現最佳。Python 2 以後會用得越來越少,直到廢棄。如果 PyPy 3 的速度始終不能比 PyPy 快,能有所提升也是好的。

Python學習書籍推薦

很多人在問,學習Python讀什麼書,這其實是一個非常通用的問題,學習分為2種方式:看書、上課,而讀書學習是最實惠也是最高效的一種,小編整理了一些Python高分書籍給大家,從0基礎到高級適合不同學習階段,希望大家學習愉快。獲取方式:點擊小編頭像,關注後私信回覆“資料”即可下載。

Python3 vs. Python2,誰將是性能之王?


分享到:


相關文章: