自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

[[235339]]

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

使用 Python 性能測(cè)試程序

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

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

  1. 測(cè)試結(jié)果不易理解
  2. 測(cè)試不包括 PyPy

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

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

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

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

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

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

測(cè)試結(jié)果

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

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

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

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

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

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

渲染 HTML 模板

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

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

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

啟動(dòng)時(shí)間

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

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

 從上圖可見(jiàn),Python 2.7 的啟動(dòng)時(shí)間是最短的。

加密測(cè)試:crypto_paes

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

對(duì)于 PyPy 用戶(hù)來(lái)說(shuō),你應(yīng)該會(huì)注意到 PyPy3 比 PyPy 慢 5 倍!

算法測(cè)試:n-queens

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

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

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

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

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

正則表達(dá)式

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

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

Python 3 比 Python 2 更快嗎?

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

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

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

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

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

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

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

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

結(jié)論

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

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

責(zé)任編輯:武曉燕 來(lái)源: 聊聊架構(gòu)
相關(guān)推薦

2022-06-28 07:40:54

JVM線(xiàn)程開(kāi)源

2018-07-19 08:49:47

Python編程語(yǔ)言測(cè)評(píng)

2020-06-18 12:23:05

WiFi速度5G

2017-09-12 11:02:51

Python編程語(yǔ)言

2023-06-22 09:20:56

測(cè)試JavaScript框架

2018-01-10 17:06:36

Python線(xiàn)性回歸數(shù)據(jù)

2009-03-22 19:19:15

多核多核服務(wù)器多核歷史

2018-02-23 10:22:42

2018-02-25 10:17:31

Linux內(nèi)核版本穩(wěn)定內(nèi)核

2018-02-28 13:20:40

Python解壓zip

2021-02-04 18:17:46

Go 版本API

2009-04-13 11:52:12

Linux基金會(huì)CEO平臺(tái)

2018-01-19 09:21:32

語(yǔ)言Python高收入國(guó)家

2009-04-10 14:35:51

Linux基金會(huì)平臺(tái)

2009-07-01 09:27:22

ASP.NETJSPPHP

2022-08-18 09:51:50

Python代碼循環(huán)

2011-07-29 08:56:21

iPadEA游戲

2009-04-11 20:31:30

數(shù)據(jù)丟失防護(hù)DLP

2013-08-12 12:36:10

2022-06-21 15:00:01

Python語(yǔ)言循環(huán)方式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)