首页 > 代码库 > Grumpy: Go 上运行 Python!

Grumpy: Go 上运行 Python!

Google 运行数百万行Python代码用于驱动youtube.com和YouTube API的前端服务器,每秒可以提供数百万的请求! YouTube的前端运行在CPython 2.7上,所以我们投入了大量的工作来改进运行时,并使我们的应用程序能很好地在其中工作。这些努力多年来取得了很多成果,但有一个问题一直得不到解决:高并发、高负载的工作很难在CPython上很好地运行。

为了解决这个问题,我们查看了许多其他Python运行时。每个都有权衡,没有解决并发问题,也没有引入其他问题。

于是我们有了一个疯狂的想法:如果我们实现一个替代运行时优化的实时服务呢?Go似乎是一个明智的平台选择,因为它的操作特性与我们的用例(例如轻量级线程)能很好地匹配。我们想要一流的语言互操作性,Go的强大的运行时类型反射系统能让这一点变得十分简单,Python在Go上会很自然,所以Grumpy诞生了。

技术分享

Grumpy 是一个 Python to Go 源代码编译器和运行时,旨在替代 CPython 2.7。

关键的区别是它将 Python 源代码编译为 Go 源代码,然后将其编译为本机代码,而不是字节码。这意味着 Grumpy没有 VM。编译的 Go 源代码是对 Grumpy 运行时的一系列调用,Go 库服务与 Python C API 类似的目的(尽管不直接支持 C API)。

部分内容编译自:opensource.googleblog.com

作者:Dylan Trotter,YouTube工程

http://www.oschina.net/news/80693/go-running-python

------------------------------------------------------------------------------------

https://github.com/google/grumpy

现在在阿里工作的赵海平在Facebook工作时就主导过类似项目(HipHop).
就是用HPHPc把PHP代码转换成C++代码,然后用g++编译成机器码来执行.
后来实践发现这样做不利于部署和调试,于是转回VM的思路,搞出了HHVM(基于LLVM JIT).
后来PHP官方开发的PHP7和Zend-JIT就是对HHVM的强势回应.

其实陈士骏他们最开始是用PHP开发了Youtube,是后来才改成Python.
https://www.quora.com/Which-Python-web-framework-was-YouTube-built-with-when-they-started-off
Contrary to popular belief, YouTube was first built with PHP when it started, and not Python.

 

仔细看了下,发现这个项目还真不简单,居然可以直接用Go的标准库,害怕了

from __go__.net.http import ListenAndServe, RedirectHandler

handler = RedirectHandler(‘http://github.com/google/grumpy‘, 303)
ListenAndServe(‘127.0.0.1:8080‘, handler)

 

Grumpy: Go 上运行 Python!