在本周於PyCon 2021舉行的Python語言峰會上,Python語言創建者Guido van Rossum公布了近期和長期計划,旨在使Python更快-快兩倍到五倍,甚至更多。
從替代運行時(例如PyPy)到包裝用C / C ++編寫的模塊,Python語言已經有許多運行速度更快的方法。但是這些方法中幾乎沒有一個涉及加速CPython本身的問題-C語言編寫的Python的參考實現,這是該語言最廣泛使用的版本。
[同樣在InfoWorld上:6個提高Python性能的項目]
短期計划是在Python 3.11上至少增加一組主要的性能改進,現已正式作為Alpha級項目進行開發。Python 3.11計划於2022年發布。
在語言峰會上的演講中,范·羅瑟姆(van Rossum)描述了當前加速Python的計划如何在某些嚴格的約束下運行。對CPython所做的任何更改都不得破壞運行時的ABI(應用程序二進制接口),以便用C編寫的Python擴展將繼續按原樣工作。根據CPython維護可維護性和簡單易懂的代碼庫的總體目標,這些更改必須是增量的和可管理的。並且所有修改都必須是開源的;CPython不能有任何專有的“黑匣子”擴展。
在這些限制條件下,van Rossum和他的團隊確定了可以自由更改的Python的一些部分。Python的字節碼系統,編譯器和解釋器都已被選作目標,因為它們傾向於在版本之間進行更改。字節碼尤其不能保證與主要版本之間的兼容性,因此如果需要,可以對其進行重大更改。
針對PPE 659概述的針對Python 3.11的第一個建議包括“自適應的專用字節碼解釋器” 。可以將在代碼的特定部分中引用特定數據類型的字節碼指令內聯為該特定數據類型的該字節碼的“專用”版本,以內聯替換,從而提高了速度。開發人員估計,在最佳情況下,性能可能會提高約50%。
有關提高速度的其他建議包括優化框架堆棧,更改函數調用方式,實現更有效的異常處理,添加優化以加快啟動時間以及修改.pyc字節碼緩存文件格式。
所有這些更改都缺少對Python提出的最普遍建議的改進之一:運行時生成機器代碼或即時編譯(“ JITing”)。范·羅瑟姆(van Rossum)在講話中建議在Python 3.11之后考慮此類計划,因為首先獲得具有針對性的更改可能帶來的性能改進是有意義的。
該項目正在完成的所有工作都已在GitHub上的fast-cypthon存儲庫中提供,代碼(CPython 3.11的一個分支)和思想都得到了跟蹤。