Grumpy:Google 用 Go 开发的 Python 运行时

2017 年 1 月 11 日

Google 运行着大量的 Python 代码,youtube.com 的前端服务器是 Python 写的,YouTube 的 API 主要也是 Python 写的。到了 YouTube 的量级,性能非常重要。YouTube 的前端主要依赖 CPython 2.7,所以 Google 花费了大量精力来优化运行时,并调整应用,以获得最好的性能。

了解 CPython 的读者应该都知道,GIL(Global Interpreter Lock)的存在,制约了 Python 应用的并发能力。

调研了很多其他 Python 运行时,并没有哪种方案能够在不引入新问题的前提下解决并发问题。

Google 的工程师开始思考一个问题,是不是可以开发一个针对实时服务进行优化的新运行时呢?

Grumpy 应运而生了。

Grumpy 是一个实验性的 Python 运行时。它将 Python 代码翻译成 Go 程序,转译(transpiled)得到的程序可以与 Go 运行时无缝集成。

因为 Google 目前有大量的 Python 代码,所以高度兼容 CPython 就非常重要。

Grumpy 有两个重要的设计选择。

首先,不支持 C 扩展模块。虽然代价是无法利用现有的大量 Python C 扩展,但是优势很明显,就是可以灵活地针对并行负载设计 API 和对象表示。而且 Grumpy 去掉了 GIL,这就可以利用 Go 的垃圾收集来管理对象生命周期,而不再是依赖引用计数。

其次,Grumpy 不是解释器。Grumpy 程序和其他任何 Go 程序一样编译、链接。尽管牺牲了开发和部署的灵活性,但是静态编译时可以进行更多优化。和 Go 代码的互操作也非常强大。Grumpy 程序可以像导入 Python 模块那样导入 Go 包。不支持 exec 、 eval 和 compile 等动态特性,Google 的产品中不会使用这些特性,所以这也是可以接受的。

按功能分,Grumpy 可以分为 grumpc 、 Grump 运行时和 Grumpy 标准库三块。其中 grumpc 负责将 Python 程序转换为 Go 程序。解析 Python 代码,生成 Go 代码。它是用 Python 实现的。

只支持 Python 2.7,社区有很多吐槽,不过 Google 的很多代码还是以该版本为主,也是可以理解的。

Grumpy 还在开发之中,感兴趣的读者可以在 GitHub 上查阅相关代码。

参考资料:

  1. https://opensource.googleblog.com/2017/01/grumpy-go-running-python.html
  2. https://github.com/google/grumpy
2017 年 1 月 11 日 18:005554
用户头像
臧秀涛 极客邦科技技术会议负责人

发布了 300 篇内容, 共 113.9 次阅读, 收获喜欢 21 次。

关注

评论

发布
暂无评论
发现更多内容

week3 命题作业

任小龙

搞定 HTTP 协议(三):如何严谨地描述一个 HTTP 报文?

零和幺

https HTTP

架构师训练营-第 03 周作业提交

Eric

极客大学架构师训练营

Spring 源码学习 - @Async注解实现原理

公众号:好奇心森林

Spring Boot aop

架构师训练营-第 02 周作业

Eric

三周作业

飞雪

Go:使用Delve和Core Dump来调试

陈思敏捷

go golang debug gdb

架构师训练营 - 第三周总结

teslə

设计模式学习总结

qihuajun

ARTS打卡 第4周

引花眠

ARTS 打卡计划

架构师训练营-第 03 周总结

Eric

极客大学架构师训练营

week3 学习总结

任小龙

架构师训练营 - 第三周作业

teslə

程序员的晚餐 | 6 月 21 日 自制小火锅

清远

美食

第三周总结

胡江涛

极客大学架构师训练营

架构师训练营 - 第 02 周学习总结

Eric

Open-Falcon安装注意事项

wong

Open-Falcon Nightingale Monitor

信息的表示与存储-整数的运算

引花眠

计算机基础

十万同时在线用户,需要多少内存?——Newbe.Claptrap 框架水平扩展实验

newbe36524

ARTS-WEEK4

一周思进

ARTS 打卡计划

区块链中的“链上”和“链下”

CECBC区块链专委会

区块链技术 分布式身份标识 难以篡改

架构师训练营第 3 周 _ 课后作业

方舟勇士

课程作业

138 张图带你 MySQL 入门

cxuan

MySQL 数据库

手写单例

Karl

Feign Client 原理和使用

公众号:好奇心森林

Spring Boot HTTP

易纲:上海可以在人民币自由兑换等方面先行先试

CECBC区块链专委会

数字货币 区块链技术 金融科技中心

ARTS 第 3 周

乌拉里

单例模式和组合模式

王鹏飞

设计模式练习及感想(训练营第三课)

看山是山

设计模式 极客大学架构师训练营

技术学习进阶(死磕法)

dudu

学习 技术

代码重构-学习总结

飞雪

Grumpy:Google 用 Go 开发的 Python 运行时-InfoQ