使用Grumpy将Python源码转换成Go

Python多年来一直饱受性能低下的诟病,各路大牛们也是绞尽脑汁推出了很多加快其运行速度的方法。Google目前也有很多项目是建立在Python的基础上,就在去年年底的时候,Google的Youtube团队在GitHub上开源了他们的Grumpy项目,这将是今年Python社区的一大利好消息。

1 简介

Grumpy的设计初衷旨在取代CPython 2.7,它可以将Python源码转换成Go源码,然后再最终编译成机器码直接执行。和传统的Python运行方式不同,Grumpy不需要虚拟机。

2 使用

1.首先你必须安装了Go,大家可以根据自己的系统选择安装方式,然后从GitHub上获取Grumpy项目。注意的是似乎Grumpy目前还不能很好的支持WINDOWS系统。

git clone https://github.com/google/grumpy.git

2.顺利执行了上面过程后进入Grumpy文件夹,就可以尝试着使用最简单的make run的方式执行Pyhton代码:

echo "print 'hello, world'" | make run

3.对于更复杂的程序,你需要先利用grumpc将Python源码编译为Go源码,再通过go build编译相应的Go源码。假设我们使用的测试代码如下:

echo 'print "hello, world"' > hello.py

然后我们使用make建立起工具链并且设置一些环境变量:

make
export GOPATH=$PWD/build
export PYTHONPATH=$PWD/build/lib/python2.7/site-packages

最后,编译Python源码并且创建可执行文件:

build/bin/grumpc hello.py > hello.go
go build -o hello hello.go

至此,你就可以通过./hello运行刚刚创建完成的可执行文件了。

3 测试

为了简单测试Grumpy的效果,我选取了一小段运行复杂度较高的代码fab.py,并通过上述方式创建了对应的可执行文件。

$ time python fac.py 100000000
(100000000, 99999999)

real    0m41.755s
user    0m41.744s
sys 0m0.008s

$ time ./fac 100000000
(100000000, 99999999)

real    0m11.919s
user    0m12.660s
sys 0m0.108s

可以发现,这个简单的测试的结果是使用Grumpy创建的执行文件运行速度比直接使用Pyhton快了接近四倍,效果很明显。

4 局限

尽管这个项目的优点数不胜数,但不得不提的是它也有一些局限性:

1.由于项目本身的限制,将无法支持execevalcompile函数。除此之外,也不会支撑C扩展库。

2.由于该项目现在还不完善,还有很多Python特性和库无法支持,最新支持情况可以看这里


在手机上阅读或分享本文请扫描以下二维码:
By @Zhengyi Yang in
Tags : #python, #go,

Comments

评论功能已关闭。