谷歌使用 Grumpy 解决 CPython 的并发问题

  • Abel Avram
  • 王纯超

2017 年 1 月 17 日

话题:开源PythonGoogle语言 & 开发

谷歌通过使用 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 中可用的一些动态功能:execevalcompile,因为支持它们将需要“使用笨重而低效的编译工具链构建 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)关注我们。

开源PythonGoogle语言 & 开发