2020年用Python3就對了!Python 3比Python 2慢嗎?哪一個版本的Python 3最快?不要再糾結Python哪個版本好!還有什么其他措施可以提高速度?哪個版本的Python最快?當然,“它取決於”許多因素,但是它取決於什么,我們應該如何為我們的應用程序找到最快的Python版本?關於這些問題,今天我將嘗試做一些測試。
使用Python性能測試器
正如我之前在speed.python.org網站上提到的,Python的核心團隊非常關心性能,這對於比較CPython版本的“官方”基准非常有用。
然而,在這個測試中仍然存在一些問題:
測試結果不容易理解。
PyPy不包括在測試中。
首先,執行命令pip安裝性能下載測試程序,然后執行以下命令:
py performance run-python={ choosed _ python _ runtime }-o my _ results . JSON
該指令將多次運行一系列針對Python目標版本的“真實”應用程序測試程序,並記錄測試結果的平均值。
在本文中,我主要測試了以下版本的Python:
2.7.10,
3.4.4、
3.5.4、
3.6.1、
3.7(beta 2).
此外,還測試了PyPy(5.6)和PyPy3(5.4.10)。
試驗結果
我已經根據這組測試用例進行了測試,每個人都可以查看測試結果。當然,您也可以編寫自己的測試用例並運行自己的測試。
我還編寫了一個簡單的腳本來獲取性能數據文件列表,並為每個測試結果制作了一個非常直觀的圖表。我把這個腳本的代碼放到了GitHub上(見文章末尾的鏈接)。
在所有圖表中,結果以秒為單位,數值越低,性能越好。
有關完整的測試結果和圖表,您可以查看以下鏈接:
我認為重要的測試包括在里面。其余的測試與已經進行的測試相似,並且已經包含在結論中。
可以參考我之前的文章:
python字符串中字符出現次數(python獲取字符串個數)
ModuleNotFoundError: No module named 'win32api' 問題解決
呈現HTML模板
django_html測試將使用django模板呈現引擎創建一個150行150列的html表。它使用Django引擎的內容和模板類。Python3.7比Python 2.7快1.19倍,但是除了Python3.7之外,所有版本的Python 3都比Python 2.7慢。該結果與speed.python.org網站的測試結果一致。
PyPy的測試結果顯示,它比任何Python版本的CPython運行得都快,而Py3的速度是PyPy的兩倍。應該注意的是,Django最近決定放棄對Django 2.0及更高版本中的Python 2的支持,這意味着PyPy將不再與Django 2兼容。
開始時間
該測試主要用於測試Python解釋器啟動所需的時間。如果您計划運行多個進程來打破Python的“GIL”約束,這一點非常重要。
我將跳過pypypy,尤其是PyPy3,我將在文章的最后討論它。
從上圖可以看出,Python 2.7的啟動時間最短。
加密測試:crypto_paes
在加密測試中,您會發現Python 2比Python 3快得多。原因是什么?因為加密需要大量的數字運算,所以Python 3丟棄32位整數,代之以長整數。
對於PyPy用戶,你應該注意到Py3比PyPy慢5倍!
算法測試:n皇后
這個算法可能不會讓每個人都感到舒服。用這種算法進行測試可能會帶回一些人在算法課上經歷過的不愉快記憶。對此我只能說抱歉。這個算法的規則實際上非常簡單,即在棋盤上放置n個“皇后”,以確保任何兩個“皇后”不在同一行、同一列或同一斜線上,這樣它們就不能互相攻擊。
在CPython系列中,Python3.7再次在性能方面領先。另外,PyPy和Py3的測試結果非常相似。
浮點操作
在浮點操作的測試中,我將通過math.cos()、math.sin()和math.sqrt()人工創建一個重浮點操作應用程序,總共創建100,000個浮點對象。
從測試結果可以看出,PyPy非常適合浮點操作。PyPy在大量數據處理、可預測的類型和方法以及周期方面顯示出了出色的性能。因為Python 3.7有一個新的快速方法調用操作碼,所以它是CPython中最快的。正規表達式
在正則表達式測試中,“我使用了網絡上50個最流行的網頁,並記錄了所有的正則表達式操作。每個操作都有一個權重,該權重是根據頁面的受歡迎程度和每個頁面的加載次數來計算的。最后,ROT13用於對數據中的字母進行編碼,這不會影響正則表達式匹配其輸入的方式。”
在這次測試中,我不知道PyPy有什么問題。我想知道其他人是否會得到同樣的結果!
Python 3比Python 2快嗎?
是的。在大多數測試中,Python3比Python2快。然而,有幾個例外值得注意。在加密測試中,由於整型數據類型,Python 3比Python2慢1.35倍。在啟動時間測試中,Python3比Python2慢1.39倍。
Python 3的緩慢啟動將是CPython核心團隊在3.8和3.9版本中解決的主要問題之一。
除了加密和啟動時間測試,在其他測試項目中,Python 3比Python2快1.2-1.3倍。改進后的Python 3.7升級將在今年年底推出。
既然PyPy快得多,為什么每個人都不使用它呢?
PyPy有一個實時編譯器,所以它比CPython快。JIT編譯器有很大的好處,因為它們在執行可預測的重復任務時非常高效。Python性能測試的一個特點是,您需要多次運行相同的代碼以使其准確,從而減少應用程序的錯誤邊界。因此,PyPy在這種測試中有更好的性能。
JIT編譯器最明顯的缺點,尤其是PyPy的JIT編譯器,是啟動成本高。另一個缺點是許多C語言擴展缺乏兼容性。因為“Python”(cpython,官方PSF Python)是用c語言編寫的,所以PyPi上的許多第三方擴展都利用了這一點。努皮就是一個很好的例子。努皮的大部分代碼都是用優化的C語言編寫的。當您執行pip install numpy命令時,它使用本地c編譯器為您的Python運行時為Python程序構建一個二進制庫。
由於PyPy是用Python編寫的,許多模塊根本不能用PyPy工作,所以您需要經常檢查。此外,PyPy還需要面對與CPython相同的挑戰:從Python2轉變為Python3。直到最近,我仍然發現PyPyPyPyP3不穩定,一些奇怪的結果仍然出現在測試中。其他一些軟件包遇到了問題,比如PyTest,所以他們放棄了對PyPyPyP3的支持。
結論
Python 3.7是最快的“官方”Python版本,PyPy是我測試過的最快的解釋器。
如果PyPy 2在未來的使用越來越少,即使PyPy33不能比PyPy更快,我希望它的速度會提高。
更多的Python視頻、源代碼和材料都是免費的。
如果您有互聯網問題,也可以咨詢我,謝謝!如果你也想一起學習人工智能,歡迎留言交流。