谷歌通过使用 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
感谢薛命灯对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们。
评论