翻身了?Python3.11性能快了近64%?。?/h1>
Python 這門編程語(yǔ)言的運(yùn)行速度并不快,這早已不是什么秘密了。很多開發(fā)者期待這門語(yǔ)言的性能有所提升,這種情況或即將發(fā)生改變,或至少朝著正確的方向前進(jìn)著,這也是Python的創(chuàng)始人重新出山后的決策結(jié)果之一。
5月7日,Python團(tuán)隊(duì)發(fā)布最新的 Python 版本 - Python 3.11。目前發(fā)布的是一個(gè)測(cè)試版本 (Beta1) ,供開發(fā)者們測(cè)試或?qū)嶒?yàn)時(shí)使用。
按照開發(fā)團(tuán)隊(duì)的所定下規(guī)約,預(yù)計(jì)將于 2022 年 10 月正式版本將釋出。
有好奇網(wǎng)友在自己的虛擬機(jī)上進(jìn)行了測(cè)試,他在單獨(dú)的 Docker 容器分別安裝了 Python 3.10 和 3.11,并查看它們?cè)谝唤M基準(zhǔn)測(cè)試中的比較。
在其中使用了pyperformance 包來(lái)完成這項(xiàng)工作,這個(gè)包會(huì)幫助開發(fā)者完成繁重的基準(zhǔn)測(cè)試工作。
總結(jié)的數(shù)據(jù),按平均數(shù)值來(lái)計(jì)算,Python 3.11 比 Python 3.10 快了 14%。3.11 新版本在某些基準(zhǔn)測(cè)試上稍微慢了一點(diǎn),但在大多數(shù)基準(zhǔn)上,速度提高了 64%。
以下是在有著 10 核 CPU 的 M1 Pro MacBook Pro 16 上運(yùn)行的基準(zhǔn)測(cè)試。每個(gè) Python 版本都安裝在 Docker 中,它使用 5 個(gè)邏輯 CPU 內(nèi)核。
以下是不同包的運(yùn)行數(shù)據(jù):
目前Python 3.11 的正式版還未正式發(fā)布,需要等待一個(gè)完全穩(wěn)定的版本,目前測(cè)試的僅是一個(gè)候選版本,也許正式版本發(fā)布后兩者之間的差距會(huì)更大。
相關(guān)報(bào)道:提速25%!CPython 3.11 來(lái)了
文 | 羅奇奇,出品 | OSC開源社區(qū)(ID:oschina2013)
在退休又復(fù)出加入微軟的 Faster CPython 團(tuán)隊(duì)后, Python 之父 Guido van Rossum 在 2021 年 Python 語(yǔ)言峰會(huì)上放下狠話,稱團(tuán)隊(duì)將在 Python 3.11 版本中實(shí)現(xiàn)至少提速 1 倍的進(jìn)展。
而在今年的 Python 語(yǔ)言峰會(huì)上,Guido 和團(tuán)隊(duì)搭檔 Mark Shannon 匯報(bào)了最新的進(jìn)展:對(duì)比 3.10 版本,CPython 3.11 的提速在 10 - 60% 之間,具體速度取決于代碼規(guī)模和工作領(lǐng)域等條件。當(dāng)使用 pyperformance 基準(zhǔn)套件測(cè)量在 Ubuntu Linux 上使用 GCC 編譯時(shí), CPython 3.11 平均比 CPython 3.10 快 25% 。
CPython 3.11 的性能改進(jìn)主要集中在更快的啟動(dòng)和更快的運(yùn)行時(shí),這些優(yōu)化大部分來(lái)自于 PEP 659 :自適應(yīng)解釋器,它運(yùn)作思路跟 JIT 有點(diǎn)相似,都是識(shí)別熱點(diǎn)代碼,但自適應(yīng)解釋器的工作范圍無(wú)法脫離字節(jié)碼。目前 PEP 659 提案的工作基本完成,但 for 循環(huán)和二進(jìn)制操作的動(dòng)態(tài)優(yōu)化仍有待完成。
在提速 25% 的同時(shí),Python 3.11 仍有一些需要改善的地方,比如 Python 在 3.11 中的內(nèi)存消耗與 3.10 中的基本相同。
此外還需關(guān)注 C 擴(kuò)展的問(wèn)題:CPython 與 C 的簡(jiǎn)單接口是主要優(yōu)勢(shì),而與 C 擴(kuò)展的不兼容性則是一大槽點(diǎn)。而 Faster CPython 團(tuán)隊(duì)在 CPython 3.11 中所做的優(yōu)化工作在很大程度上忽略了擴(kuò)展模塊的問(wèn)題,對(duì)此,團(tuán)隊(duì)領(lǐng)導(dǎo)者 Shannon 表示,團(tuán)隊(duì)正在開辟將低級(jí)函數(shù) API 暴露給虛擬機(jī)的可能性,以盡可能地減少 Python 代碼和 C 代碼。
至于飽受期待的 JIT 編譯器,Shannon 表示實(shí)現(xiàn) JIT 的第一步是實(shí)現(xiàn)一個(gè)跟蹤解釋器,但目前還有太多需要關(guān)注的項(xiàng)目,引入 JIT 編譯器的工作還有一段路要走,“最早可能要到 3.13 才能到達(dá)”。(順便說(shuō)一下,Shannon 一直對(duì) CPython 是否真的需要引入 JIT 持懷疑態(tài)度。)
有意思的是,昨天我們報(bào)道了開發(fā)者 Sam Gross 的新提案:完全移除 CPython 解釋器的 GIL- 全局解釋器鎖 。這個(gè)提案和 Faster CPython 團(tuán)隊(duì)的工作將以截然不同的方式加速多線程 Python 代碼,但兩者又可能產(chǎn)生一些沖突,畢竟 Faster CPython 已實(shí)施的優(yōu)化,很大一部分都基于 GIL 仍存在的前提。
注:在去年的核心開發(fā)者 sprint 會(huì)議上,核心開發(fā)者們跟 Sam Gross 對(duì) nogil 項(xiàng)目做了一次深入研討,回答了大家較為關(guān)注的諸多問(wèn)題。具體的會(huì)議紀(jì)要,可查看這篇文章——Python 官方研討會(huì):徹底移除 GIL 真的可行么?