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

简介:

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 上查阅相关代码。

本文转自d1net(转载)

相关文章
|
11月前
|
安全 Go Python
GO语言开发GUI安全工具实践(一)
GO语言开发GUI安全工具实践
|
缓存 IDE 数据可视化
Go 日常开发常备第三方库和工具(中)
重点和大家分享下我们日常开发中所使用到的一些第三方库与工具。 这里我主要将这些库分为两类: 业务开发 基础工具开发
|
JSON Go 数据格式
两款 go 开发实用工具
两款 go 开发实用工具
106 0
两款 go 开发实用工具
|
开发框架 缓存 NoSQL
Go 日常开发常备第三方库和工具(下)
重点和大家分享下我们日常开发中所使用到的一些第三方库与工具。 这里我主要将这些库分为两类: 业务开发 基础工具开发
|
NoSQL Go API
Go 日常开发常备第三方库和工具(上)
重点和大家分享下我们日常开发中所使用到的一些第三方库与工具。 这里我主要将这些库分为两类: 业务开发 基础工具开发
|
NoSQL Linux Go
Go开发工具
1.4 Go开发工具 本节我将介绍几个开发工具,它们都具有自动化提示,自动化fmt功能。因为它们都是跨平台的,所以安装步骤之类的都是通用的。
1533 0
|
16天前
|
Go
go语言中的数据类型
go语言中的数据类型
13 0
|
3天前
|
数据采集 存储 Go
使用Go语言和chromedp库下载Instagram图片:简易指南
Go语言爬虫示例使用chromedp库下载Instagram图片,关键步骤包括设置代理IP、创建带代理的浏览器上下文及执行任务,如导航至用户页面、截图并存储图片。代码中新增`analyzeAndStoreImage`函数对图片进行分析和分类后存储。注意Instagram的反爬策略可能需要代码适时调整。
使用Go语言和chromedp库下载Instagram图片:简易指南