技术图片
 

昨天,谷歌发布了一个 Python 性能加速方案 —— Grumpy,可以将 Python 代码转译(transcompile)为 Go 源代码,然后再编译为 Native Code。目前在 Github 上已经获得了 3000+ star。

项目地址:https://github.com/google/grumpy

谷歌此举为社区又增添了一个 Python 性能加速方案。在众多编程语言中,Python 一直被诟病性能不高,背后的一个重要原因就是其标准实现 CPython 中的全局解释器锁(GIL)的存在,限制了并发和并行能力。一直以来,业界和社区都在寻找比较好的解决方案,目前知名的有 PyPy,微软的 Pyjion,和 Dropbox 的 Pyston等 JIT 实现。

Python 在谷歌的应用非常广泛,YouTube 的前端服务器和 YouTube API 就是采用 Python 语言编写。Python 之父曾经也在谷歌任职。

根据相关博文,这个项目的初衷就是为了提高 Python 代码的性能。Grumpy 既是一个源代码转译器,又提供了一个运行时。目前,该项目还处于实验阶段,而且不支持 Python 3。

负责开发该项目的工程师在 Hacker News 上回答网友质疑为什么只支持 Python 2时,指出『谷歌目前有着很大的 Python 2.7 代码库,因此是我们的侧重点』。还有人猜测,谷歌此举可能是为了应对 Python 2.7 到 2020 年时终止维护有关。与其将代码升级到 Python 3,谷歌更愿意未来将一部分 Python 代码转译为 Go 代码。

不过,这个猜测似乎并没有太多根据。谷歌工程师做出了如下回应,『(该项目的)目的是要继续用 Python 编码,转译后的代码没办法直接进行二次处理。当然对于性能关键的部分可能会用 Go 重写。未来采取的是混合模式。』

社区里还有通过引入 Rust、Lua、Julia 等语言加速 Python 的做法。

由于 Python 本身一直没能很好地解决 GIL 带来的性能限制,社区未来应该会继续出现其他的解决方案。目前应该有 JIT 即时编译和混合代码两种形式,而且得到了不少大公司的支持。

这个趋势对于以后学习 Python 来说也是值得注意的:未来肯定不是只要会 Python 就能满足工作需求,可能还需要学习 Go 等语言并研究如何结合使用。