
Python貓注:在今年5月的 Python 語言峰會上,Guido van Rossum 作了一場《Making CPython Faster》的分享(材料在此),宣告他加入了激動人心的“香農計劃”,旨在 4 年內提升 Python 性能至 5 倍。近日,Guido 上了一檔英文播客節目(時長 30 分鐘),談論了他正在做的與高性能相關的工作,解答了幾個問題。播客作者整理了一份內容紀要,本文是對該紀要的翻譯。
作者:Software at Scale
譯者:豌豆花下貓
Guido:在某種意義上,它對我來說是一個相對舒服的話題,因為這意味著與 Python 的核心打交道,而我對這方面還算熟悉。當我在微軟工作時,我曾短暫地關注過 Azure,但我意識到我在谷歌或 Dropbox 時就不喜歡這類工作。然后我關注了機器學習,但這需要花很多時間來做一些與 Python 無關的事情,甚至它與 Python 相關的部分就很少。
Guido:我喜歡他思考問題的方式。大多數其它聚焦于 Python 性能的方法,如 PyPy 和 Cinder,并不適用于所有的使用場景,因為它們不能向后兼容擴展模塊。Mark 具有 CPython 開發者的視角和經驗,并且有一種可行的方法來維持向后兼容性,這是最難解決的問題。Python 的字節碼解釋器經常要在小版本之間(例如 3.8→3.9)進行修改,原因有很多,比如新的操作碼,所以修改它是一種相對安全的方案。
Guido:當執行一個程序時,你不知道它會在運行了幾分之一毫秒后崩潰,還是會持續運行三周時間。因為對于同一份代碼,在第一種情況下,它可能觸發了一個 bug。如果運行程序需要三周時間,也許提前半小時優化所有待運行的代碼是有意義的。
但很明顯,特別是在像 Python 這樣的動態語言中,我們盡可能多地做,而不要求用戶告訴我們他們到底需要怎么做,你只是想盡快開始執行代碼。所以,如果有一個小腳本,或者一個大程序,它碰巧執行失敗了或者因為某些原因提前退出了,你就不用花費時間去優化全部的代碼了。
所以,我們要做的就是保持字節碼編譯器的簡單化,以便能盡快地開始執行代碼。如果有某些函數被多次執行,那么我們就稱其為 hot 函數?!癶ot”存在多種定義。在某些情況下,如果一個函數被調用超過一次,或者超過兩次,或者超過 10 次,那么它被定義成一個熱門函數。而在其它保守的情況下,你可能說“只有被調用 1000 次才算 hot”。
然后,當參數的類型是某些特定類型時,專門化的自適應編譯器(PEP-659 Specializing Adaptive Compiler)會嘗試用更快的字節碼來替換某些字節碼。一個簡單的假想的例子是 Python 中的加號運算符,它可以令很多對象相加,比如整數、字符串、列表,甚至元組。但是,你不能將整數與字符串相加。
因此,優化的方法就是提供一個單獨的“兩個整數相加”的字節碼,它是一個對用戶隱藏的第二層字節碼。(“優化”通常被稱為加速 quickening,但一般在我們的語境中,我們稱之為專門化 specializing)。這個操作碼假設它的兩個參數都是真正的 Python 整型對象,直接讀取這些對象的值,并在機器寄存器中將這些值相加,最后將結果推回堆棧。
兩個整數相加的操作仍然需要對參數進行類型檢查。因此,它不是完全不受約束的,但這種類型檢查相比于完全泛化的面向對象的加號操作,前者在實現上要快得多。
最后,有可能一個函數被整型參數調用了數百萬次,然后突然一小段代碼用浮點型參數調用它,或者出現更糟的情況。此時,解釋器會直接執行原始的字節碼。這是一個重要的部分,讓你始終能得到完整的 Python 語義。
Python貓注:“香農計劃”的最終目標是將解釋器的執行過程分層,并對不同層做出定制的優化。
Guido:即時編譯的方案有一大堆我們想要避免的情感包袱。比如,我們不清楚到底編譯什么,以及什么時候編譯。在程序開始執行之前,解釋器將源代碼編譯成字節碼,然后,再將字節碼轉換為專門的字節碼。這意味著,所有的事情都在運行時的某個時刻發生,那么,哪個部分是所謂的即時(Just-In-Time)呢?
另外,人們通常認為 JIT 會自動地使所有代碼變得更好。不幸的是,你通常無法真正地預測代碼的性能。由于有現代的 CPU 和它們神奇的分支預測,我們已經擁有了足夠的性能。例如,我們以一種本認為能夠明顯減少內存訪問次數的方式,編寫了一份代碼。但是,當對它進行基準測試時,我們發現它的運行速度與舊的未優化代碼一樣快,因為 CPU 在沒有我們任何幫助的情況下,計算出了優化的訪問模式。我希望我知道現代 CPU 在分支預測和內聯緩存方面做了什么,因為這就像是魔法一般。
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
CDA數據分析師證書考試體系(更新于2025年05月22日)
2025-05-26解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25