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.由于项目本身的限制,将无法支持exec
,eval
和compile
函数。除此之外,也不会支撑C扩展库。
2.由于该项目现在还不完善,还有很多Python特性和库无法支持,最新支持情况可以看这里。
Comments