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(转载)

相关文章
|
15天前
|
存储 数据库连接 API
Python环境变量在开发和运行Python应用程序时起着重要的作用
Python环境变量在开发和运行Python应用程序时起着重要的作用
61 15
|
2月前
|
算法 测试技术 开发者
性能优化与代码审查:提升Python开发效率
【10月更文挑战第12天】本文探讨了Python开发中性能优化和代码审查的重要性,介绍了选择合适数据结构、使用生成器、避免全局变量等性能优化技巧,以及遵守编码规范、使用静态代码分析工具、编写单元测试等代码审查方法,旨在帮助开发者提升开发效率和代码质量。
37 5
|
2月前
|
算法 测试技术 开发者
性能优化与代码审查:提升Python开发效率
【10月更文挑战第6天】本文探讨了性能优化和代码审查在Python开发中的重要性,提供了选择合适数据结构、使用生成器、避免全局变量等性能优化技巧,以及遵守编码规范、使用静态代码分析工具、编写单元测试等代码审查方法,旨在帮助开发者提升开发效率和代码质量。
56 5
|
27天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
135 45
|
22天前
|
JSON 安全 API
如何使用Python开发API接口?
在现代软件开发中,API(应用程序编程接口)用于不同软件组件之间的通信和数据交换,实现系统互操作性。Python因其简单易用和强大功能,成为开发API的热门选择。本文详细介绍了Python开发API的基础知识、优势、实现方式(如Flask和Django框架)、实战示例及注意事项,帮助读者掌握高效、安全的API开发技巧。
46 3
如何使用Python开发API接口?
|
15天前
|
JSON API 数据格式
如何使用Python开发1688商品详情API接口?
本文介绍了如何使用Python开发1688商品详情API接口,获取商品的标题、价格、销量和评价等详细信息。主要内容包括注册1688开放平台账号、安装必要Python模块、了解API接口、生成签名、编写Python代码、解析返回数据以及错误处理和日志记录。通过这些步骤,开发者可以轻松地集成1688商品数据到自己的应用中。
30 1
|
21天前
|
数据采集 存储 JSON
Python爬虫开发中的分析与方案制定
Python爬虫开发中的分析与方案制定
|
28天前
|
数据可视化 开发者 Python
Python GUI开发:Tkinter与PyQt的实战应用与对比分析
【10月更文挑战第26天】本文介绍了Python中两种常用的GUI工具包——Tkinter和PyQt。Tkinter内置于Python标准库,适合初学者快速上手,提供基本的GUI组件和方法。PyQt基于Qt库,功能强大且灵活,适用于创建复杂的GUI应用程序。通过实战示例和对比分析,帮助开发者选择合适的工具包以满足项目需求。
85 7
|
1月前
|
算法 测试技术 开发者
性能优化与代码审查:提升Python开发效率
探讨了Python开发中性能优化和代码审查的重要性,介绍了选择合适数据结构、使用生成器、避免全局变量等性能优化技巧,以及遵守编码规范、使用静态代码分析工具、编写单元测试等代码审查方法,旨在帮助开发者提升开发效率和代码质量。
42 8
|
2月前
|
Linux 区块链 Python
Python实用记录(十三):python脚本打包exe文件并运行
这篇文章介绍了如何使用PyInstaller将Python脚本打包成可执行文件(exe),并提供了详细的步骤和注意事项。
68 1
Python实用记录(十三):python脚本打包exe文件并运行