中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

究竟哪個(gè)版本的Python是最快的?

2018-07-05    來源:raincent

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用

Python 3 比 Python 2 慢嗎?哪個(gè)版本的 Python 3 速度最快?還有哪些措施可以提高速度?究竟哪個(gè)版本的 Python 是最快的?當(dāng)然,“這取決于”多種因素,但它具體取決于什么,我們應(yīng)當(dāng)如何為自己的應(yīng)用程序找到最快的 Python 版本呢?就這些問題,今天我來試著做一些測試。

使用 Python 性能測試程序

我之前在 speed.python.org 網(wǎng)站上提到過,Python 核心團(tuán)隊(duì)非常關(guān)心性能,這對于比較 CPython 版本的“官方”基準(zhǔn)測試非常有用。

但是這個(gè)測試依然存在一些問題:

• 測試結(jié)果不易理解

• 測試不包括 PyPy

 

 

首先,執(zhí)行指令 pip install performance 來 下載測試程序,然后執(zhí)行以下指令:

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

該指令將針對 Python 的目標(biāo)版本多次運(yùn)行一系列“真實(shí)”應(yīng)用的測試程序,并記錄測試結(jié)果的平均值。

在本文中,我主要對以下版本的 Python 進(jìn)行了測試:

2.7.10,
3.4.4,
3.5.4,
3.6.1,
3.7(beta 2)。

此外,還測試了 PyPy(5.6)和 PyPy3(5.4.10)。

測試結(jié)果

我已經(jīng)根據(jù)這套測試用例進(jìn)行了測試,大家可以查看測試結(jié)果。當(dāng)然,你也可以編寫自己的測試用例并運(yùn)行自己的測試。

我還編寫了一個(gè)簡單的腳本,用來獲取性能數(shù)據(jù)文件列表,并為每個(gè)測試結(jié)果制作了非常直觀的圖表。我將這個(gè)腳本的代碼放在了 GitHub 上(見文末鏈接)。

在所有圖表中,結(jié)果都以秒為單位,數(shù)值越低說明性能越好。

關(guān)于完整的測試結(jié)果和圖表,可以查看以下鏈接:

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

我認(rèn)為很重要的測試都包含在其中了。其余的測試與已經(jīng)進(jìn)行的測試大同小異,已經(jīng)包含在結(jié)論中了。

渲染 HTML 模板

django_html 測試將使用 Django 模板渲染引擎創(chuàng)建一個(gè) 150 行×150 列的 HTML 表格。它利用了 Django 引擎的內(nèi)容和模板類。

 

 

Python 3.7 的速度 比 Python 2.7 快 1.19 倍,但是除了 Python3.7 之外,其他版本的 Python3 都比 Python 2.7 慢。該結(jié)果與 speed.python.org 網(wǎng)站的測試結(jié)果一致。

PyPy 的測試結(jié)果顯示,其運(yùn)行速度比任何一個(gè) CPython 的 Python 版本都快得多,而 PyPy3 則會比 PyPy 慢兩倍。需要注意的是,Django 最近決定在 Django 2.0 及更高版本中將放棄對 Python 2 的支持,這意味著 PyPy 將不再與 Django 2 兼容。

啟動時(shí)間

該測試主要用來測試 Python 解釋器啟動所花費(fèi)的時(shí)間。如果你打算運(yùn)行多個(gè)進(jìn)程來打破 Python 的“GIL”約束,那么這將是非常重要的。

 

 

此處我先跳過 PyPy,尤其是 PyPy3,我會在文章末尾再進(jìn)行探討。

從上圖可見,Python 2.7 的啟動時(shí)間是最短的。

加密測試:crypto_paes

 

 

在加密測試中,你會發(fā)現(xiàn) Python 2 相比 Python 3 的速度明顯快得多。什么原因呢?因?yàn)榧用苄枰罅康臄?shù)字運(yùn)算,而 Python 3 廢棄了 32 位整型,取而代之的是長整型。

對于 PyPy 用戶來說,你應(yīng)該會注意到 PyPy3 比 PyPy 慢 5 倍!

算法測試:n-queens

這個(gè)算法可能不會讓所有人都舒心,用這個(gè)算法來進(jìn)行測試,可能會勾起一些人當(dāng)初在算法課上經(jīng)歷的不美好回憶,對此我只能說抱歉了。這個(gè)算法的規(guī)則實(shí)際上很簡單,就是把 n 個(gè)“皇后”放在棋盤上,保證任意兩個(gè)“皇后”都不在同一行、同一列或者同一斜線上,使她們攻擊不到彼此。

 

 

在 CPython 系列中,Python3.7 的性能再次奪魁。此外,PyPy 和 PyPy3 的測試結(jié)果非常相似。

浮點(diǎn)運(yùn)算

在浮點(diǎn)運(yùn)算的測試中,我將人為地通過 math.cos(),math.sin() 和 math.sqrt() 函數(shù)創(chuàng)建繁重的浮點(diǎn)運(yùn)算應(yīng)用程序,總共創(chuàng)建 10 萬個(gè)浮點(diǎn)對象。

 

 

從測試結(jié)果可以看出,PyPy 非常適合浮點(diǎn)運(yùn)算,對于大量的數(shù)據(jù)處理、可預(yù)測的類型和方法以及循環(huán),PyPy 展現(xiàn)出了杰出的性能。由于 Python 3.7 具有新的快速方法調(diào)用操作碼,因此在 CPython 中,它的速度最快。

正則表達(dá)式

在正則表達(dá)式測試中,“我使用了網(wǎng)絡(luò)上最流行的 50 個(gè)網(wǎng)頁,并記錄所有正則表達(dá)式操作。每個(gè)操作都有一個(gè)權(quán)重,它根據(jù)頁面出現(xiàn)的熱門程度以及加載每個(gè)頁面時(shí)執(zhí)行的次數(shù)計(jì)算得來。最后,使用 ROT13 對數(shù)據(jù)中的字母進(jìn)行編碼,這樣不會影響正則表達(dá)式匹配其輸入的方式。”

 

 

在這個(gè)測試中,我不知道 PyPy 出了什么問題,我很想知道其他人是否得到相同的結(jié)果!

更新:PyPy 團(tuán)隊(duì)看到了這篇文章,并在幾個(gè)小時(shí)內(nèi)解決了這個(gè)問題

@cfbolz @anthonypjshaw 解決了這個(gè)問題: https://t.co/9UuNj1Gd8F

Python 3 比 Python 2 更快嗎?

是的! 在大多數(shù)測試中,Python3 都比 Python2 更快。但有幾個(gè)例外情況值得注意,在加密測試中,由于整型數(shù)據(jù)類型的原因,Python 3 的速度比 Python2 慢了 1.35 倍,在啟動時(shí)間測試中,Python3 則比 Python2 慢了 1.39 倍。

Python 3 啟動慢的問題將會是 CPython 核心團(tuán)隊(duì)在 3.8 和 3.9 版本中主要解決的問題之一。

除了加密和啟動時(shí)間測試之外,在其他的測試項(xiàng)目中,Python 3 的速度比 Python2 大約快 1.2-1.3 倍。改進(jìn)后的 Python 3.7 升級版將會在今年年底面世。

既然 PyPy 快得多,為什么不是所有人都使用它呢?

PyPy 擁有即時(shí)(JIT)編譯器,因此它比 CPython 快。JIT 編譯器具有很大的好處,因?yàn)樗鼈冊趫?zhí)行可預(yù)測的重復(fù)性任務(wù)時(shí)非常高效。Python 性能測試的其中一個(gè)特點(diǎn)是,你需要多次運(yùn)行同一段代碼以使其準(zhǔn)確無誤,從而減少應(yīng)用程序的錯誤邊界。因此,PyPy 面對這樣的測試性能更優(yōu)。

JIT 編譯器,尤其是 PyPy 的 JIT 編譯器最顯著的缺點(diǎn)是啟動成本高。另一個(gè)缺點(diǎn)是許多 C 語言擴(kuò)展程序缺乏兼容性。因?yàn)?ldquo;Python”(CPython,官方的 PSF Python)是用 C 語言編寫的,PyPi 上的許多第三方擴(kuò)展利用了這一點(diǎn)。Numpy 就是一個(gè)很好的例子,Numpy 的大部分代碼都是用優(yōu)化的 C 代碼編寫的。當(dāng)你執(zhí)行 pip install numpy 命令時(shí),它會使用本地 C 編譯器為你的 Python 運(yùn)行時(shí)建立一個(gè)二進(jìn)制庫,供 Python 程序使用。

由于 PyPy 是用 Python 編寫的,很多模塊根本無法在 PyPy 中工作,所以你需要經(jīng)常進(jìn)行檢查。

此外,PyPy 也需要面對與 CPython 相同的挑戰(zhàn):從 Python2 向 Python3 轉(zhuǎn)變。直到最近我仍然發(fā)現(xiàn) PyPy3 不穩(wěn)定,在測試中仍然會出現(xiàn)一些奇怪的結(jié)果。一些其他的軟件包遇到了問題,比如 PyTest,因此它們放棄了對 PyPy3 的支持。

結(jié)論

Python 3.7 是速度最快的“官方”Python 版本,在我測試過的解釋器中,PyPy 則是最快的。

如果 Python2 以后用得越來越少,即使 PyPy3 無法比 PyPy 更快,我也希望它在速度上有所提升。

查看英文原文:https://hackernoon.com/which-is-the-fastest-version-of-python-2ae7c61a6b2b

標(biāo)簽: b2b 代碼 腳本 網(wǎng)絡(luò)

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:使用拓?fù)鋽?shù)據(jù)分析理解卷積神經(jīng)網(wǎng)絡(luò)模型的工作過程

下一篇:任奎教授:數(shù)據(jù)安全的現(xiàn)狀與趨勢