谷歌通過使用Go語言創建了一個新的Python運行時,解決了CPython中全局解釋器鎖(Global Interpreter Lock)導致的并發局限。
谷歌的YouTube前端和API使用Python開發,運行在CPython 2.7之上,CPython 2.7是Python解釋器的參考實現。這些年來,Python代碼已經增長到數百萬行了,在經過對運行時進行性能調整之后一般表現良好。但是他們碰到了一個再三出現的問題。據谷歌透露:“并發負載在CPython上的表現并不好。”
在研究了許多其他可能的解決方案后,谷歌決定嘗試在Go的運行時上面運行Python代碼,因為它對并發性的強大支持。于是Grumpy項目誕生了。Grumpy可以將Python代碼轉換為Go源代碼,然后將其編譯為目標平臺的本地代碼。Go中間代碼是一系列應用在Python對象數據結構上的操作。
因為它使用了編譯,Grumpy犧牲了解釋型語言所具有的一些的開發自由度和特性。但谷歌聲稱,靜態分析帶來了性能上的優化,通過簡單的導入就可以使用Go的包,這兩項好處彌補了上述的不足。
靜態編譯的另一個結果是Grumpy不支持并且將“可能永遠不支持”CPython中可用的一些動態功能:exec、eval和compile,因為支持它們將需要“使用笨重而低效的編譯工具鏈構建Grumpy程序”。雖然理論上可能,但是Grumpy團隊表示,他們也不打算支持C擴展模塊,因為“Grumpy的API和對象布局與CPython不同”。
Google試圖用Grumpy替代CPython 2.7。有些人希望看到Grumpy在未來支持Python 3.x。在回答有關支持Python 3的問題時,YouTube的高級軟件工程師Dylan Trotter說:“我們有一個大的Python 2.7代碼庫,所以這是我們一直關注的。我肯定想支持Python 3。”他還在另一個帖子中說,“近期沒有Python 3的具體計劃,但長期來說我肯定想要支持它。”
Google基于Apache 2.0許可在GitHub上開源Grumpy,邀請開發人員評論和貢獻。 還為此設立了一個論壇。
查看英文原文:Google Solves CPython’s Concurrency Issues with Grumpy