PyPy為什么能讓Python比C還快?一文了解內(nèi)在機制
共 2827字,需瀏覽 6分鐘
·
2024-04-23 08:15
「如果想讓代碼運行得更快,您應該使用 PyPy?!埂?Python 之父 Guido van Rossum
對于研究人員來說,迅速把想法代碼化并查看其是否行得通至關重要。Python 是能夠實現(xiàn)這一目標的出色語言,它能夠讓人們專注于想法本身,而不必過度為代碼格式等無聊的事情困擾。
但是,Python 有一個致命的缺點:速度比 C、C ++ 等語言慢很多。那么,構建一個 Python 原型測試想法之后,如何將其轉變?yōu)榭焖偾腋咝阅艿墓ぞ??通常來說,人們還要再進行一步工作:將 Python 代碼手動轉換為 C 語言的代碼。但如果 Python 原型本身就可以運行得很快,那么轉換代碼的時間就可以做一些更有意義的事情。
import timefrom termcolor import coloredstart = time.time()number = 0for i in range(100000000):number += iprint(colored("FINISHED", "green"))print(f"Ellapsed time: {time.time() - start} s")
為了證明 PyPy 的速度,使用默認的 Python 解釋器和 PyPy 運行上述代碼,執(zhí)行一個從整數(shù) 0 加到 100,000,000 的循環(huán), 然后打印出運行時間。運行結果如下:
這不是學術意義上的評估,但該結果是令人驚嘆的。與大約需要 10 秒鐘的默認 Python 解釋器相比,PyPy 僅用 0.22 秒就完成了執(zhí)行。而且無需進行任何更改就可以直接將 Python 代碼放到 PyPy 上。而同一臺計算機上,等效的 C 語言實現(xiàn)需要 0.32 秒,PyPy 甚至擊敗了最快的 C 語言。
為什么 PyPy 這么快?
盡管代碼完全相同,但代碼的執(zhí)行方式卻大不相同。PyPy 提升速度的秘訣是「即時編譯( just-in-time compilation)」,即 JIT 編譯。
提前編譯
C、C ++、Swift、Haskell、Rust 等編程語言通常是提前編譯(AOT 編譯)的。這意味著用這些語言編寫代碼之后,編譯器會將源代碼轉換成特定計算機架構可讀的機器碼。也就是說在執(zhí)行程序時,執(zhí)行的并不是原始源代碼,而是機器碼。
解釋語言
與 C 語言等上述語言不同,Python、JavaScript、PHP 等語言采用另一種方法——解釋語言。與將源代碼轉換為機器碼相比,解釋的過程中源代碼是保持不變的。每次運行程序時,解釋器都會逐行查看代碼并運行。例如,每個 Web 瀏覽器都內(nèi)置了 JavaScript 解釋器。
解釋器逐行運行程序
即時編譯
PyPy 是利用即時編譯來執(zhí)行 Python 代碼的。即 PyPy 不同于解釋器,它并不會逐行運行代碼,而是在執(zhí)行程序前先將部分代碼編譯成機器碼。
JIT 編譯綜合了提前編譯和解釋
最后推薦一下我們團隊寫的量化小冊的內(nèi)容,45篇內(nèi)容!從Python安裝,入門,數(shù)據(jù)分析,爬取股票基金的歷史+實時數(shù)據(jù),以及如何寫一個簡單量化策略,策略回測,如何看資金曲線統(tǒng)統(tǒng)都有介紹!非常超值!
歡迎訂閱:原價199 早鳥價2杯咖啡錢,即可永久閱讀。滿400人又要漲價了,現(xiàn)在的價格非常非常低,只要2杯奶茶,就可以終身訂閱+課程源碼,還有永久陪伴群。48小時無理由退款,放心食用!
往期推薦
量化: 如何用Python爬取創(chuàng)業(yè)板歷史+實時股票數(shù)據(jù)!|實戰(zhàn)股票分析篇利用Pandas 9招挖掘五糧液股價!|實戰(zhàn)股票數(shù)據(jù)分析篇 Pandas滾動操作 |量化股票第一步,用Python畫股票K線,雙均線圖,可視化你的股票數(shù)據(jù)!|如何用Python爬取全部800多只ETF基金數(shù)據(jù)!|如何用Python寫一個雙均線策略 |如何用Python開發(fā)一個多策略機器人!上篇!|Python量化系列-用布林策略買五糧液能賺多少錢?|只要4秒鐘!用Python 獲取上證指數(shù)34年的歷史日線數(shù)據(jù)!
入門: 最全的零基礎學Python的問題 | 零基礎學了8個月的Python | 實戰(zhàn)項目 |學Python就是這條捷徑
干貨:爬取豆瓣短評,電影《后來的我們》 | 38年NBA最佳球員分析 | 從萬眾期待到口碑撲街!唐探3令人失望 | 笑看新倚天屠龍記 | 燈謎答題王 |用Python做個海量小姐姐素描圖 |碟中諜這么火,我用機器學習做個迷你推薦系統(tǒng)電影
趣味:彈球游戲 | 九宮格 | 漂亮的花 | 兩百行Python《天天酷跑》游戲!
AI: 會做詩的機器人 | 給圖片上色 | 預測收入 | 碟中諜這么火,我用機器學習做個迷你推薦系統(tǒng)電影
小工具: Pdf轉Word,輕松搞定表格和水印! | 一鍵把html網(wǎng)頁保存為pdf!| 再見PDF提取收費! | 用90行代碼打造最強PDF轉換器,word、PPT、excel、markdown、html一鍵轉換 | 制作一款釘釘?shù)蛢r機票提示器! |60行代碼做了一個語音壁紙切換器天天看小姐姐!|
