加速python性能的神器pypy

pypy的简介、安装、使用、对比

Posted by TuoX on April 10, 2018

简介

随着人工智能的风潮,python越来越广泛的被人们所知,上到管理下到大学,甚至中学,都将python选为必修课之一。

python的特点:1.易于学习 2.易于阅读 3.易于维护 4.广泛的标准库 5.互动模式 6.可移植 7.可扩展 8.提供数据库接口 9.GUI编程 10.可嵌入

不妨夸张的说,python无所不能。

但是python的性能一直被诟病,那有没有类似于Java性能的知名技术HotSpot一样的技术呢?

答案是有的,就是pypy。其中最主要的就是集成了一种即时(JIT)编译器。对于此编译器,大家可以查阅更多相关的资料,说的都比我好,我就不重复了。

安装

1.下载官方编译好的包 地址

我选择的是linux64位python3.5.3的版本

wget https://bitbucket.org/pypy/pypy/downloads/pypy3-v5.10.1-linux64.tar.bz2

2.解压

tar jxvf pypy3-v5.10.1-linux64.tar.bz2

解压完成之后目录下有一个bin文件夹,里面有一个pypy3的可执行文件。可以选择将其添加到path,这样子就可以直接使用pypy3来执行啦。

ln -s ***/pypy3-v5.10.1-linux64/bin/pypy3 /usr/local/bin

3.安装pip

由于pypy3的第三方包是与系统的pip是独立开来的,所有需要我们自己独立安装。

***/bin/pypy3 -m ensurepip # 安装pip
***/bin/pip3 install -U pip wheel # 把pip升级最新版本

支持的第三方库已经覆盖主流的库,所以使用上基本没啥问题。

使用

使用方式非常简单,与python执行并无区别,只是把原来的python xxx.py换成pypy3 *xxx.py

对比

此次对比代码,采用比较简单的方式,循环一千万次,获取随机数,看它的执行时长。

import random
import datetime

start = datetime.datetime.now()
for i in range(10000000):
    random.random()
end = datetime.datetime.now()
print((end-start).total_seconds())

结果:

可以看出,python3的速度略快python2,但是pypy3的速度已经远超出太多。

结语

pypy是一个提速神器,可以把python的性能往上再提一个层级,享受快速开发的同时,还可以享受速度带来的愉悦,何其乐哉。