关闭

python的未来-pypy

744人阅读 评论(0) 收藏 举报
分类:
http://blog.csdn.net/u010786109/article/details/40920585     

        PyPy是一个虚拟机项目,主要分为两部分:一个Python的实现和 一个编译器

      PyPy的第一部分: 用Python实现的Python

   其实这么说并不准确,准确得说应该是用rPython实现的PythonrPythonPython的一个子集,虽然rPython不是完整的Python,但用rPython写的这个Python实现却是可以解释完整的Python语言。

PyPy的第二部分:编译器

      这是一个编译rPython的编译器,或者说这个编译器有一个rPython的前端,目前也只有这么一个前端,不过它的后端却是不少,也就是说这个编译器支持许多的目标语言,比较重要的有:CCILJavaScript...

      第一部分看成pypy(1)第二部分看成pypy(2)

      为什么你在同一层面下同时需要这两者?你可以这样想一下:PyPy(1)是一个用RPython写的解释器,因此它能加

载用户的Python代码并将它编译成字节码。但是这个用RPython写的解释器本身要能运行,就必须要被另外一个

Python实现去解释。我们可以直接用CPython去.运行这个解释器。但是这个还不够快取而代之,我们使用了

PyPy(2)去编译这个PyPy的解释器,生成其他平台(比如C,JVMCLI)代码在我们的机器上运

行,并且还加入了JIT特性。JIT能够把字节码转换成机器语言,pypy之所以快,是因为它整合了JIT跟踪技术的优化

编译器

            pypy性能测试

                  i     

        

        Cpython2.7.6pyston0.2pypy2.2.1的性能对比,使用的是pyston源代码目录下的minibenchmarksmicrobenchmarks

的python代码来跑,对比结果如下表所示


Cpython2.7.6

pyston0.2

Pypy2.2.1

microbenchmarks




attribute_lookup.py

258.544s

200.387s

2.667s

attrs.py

0.622s

1.658s

0.086s

closures.py

0.485s

6.658s

0.058s

empty_loop.py

3.532s

19.248s

0.248s

fib2.py

3.375s

0.669s

0.804s

fib.py

3.696s

0.636s

0.864s

function_calls.py

5.283s

0.878s

0.303s

gcj_2014_2_b.py

1.527s

45.803s

0.276s

gcj_2014_3_b.py

0.022s

0.174s

0.069s

iteration.py

0.185s

1.242s

0.062s

lcg.py

2.910s

9.097s

0.235s

listcomp_bench.py

10.132s

56.170s

1.379s

nested.py

0.368s

6.828s

0.057s

polymorphism.py

4.358s

4.390s

14.260s

prime_summing.py

20.197s


43.779s

1.250s

pydigits.py

0.034s

Failed

0.039s

repatching.py

0.475s

0.384s

0.061s

simple_sum.py

0.075s

0.578s

0.040s

sort.py

2.216s

4.587s

0.135s

thread_contention.py

6.486s

8.133s

0.240s

thread_uncontended.py

1.324s

5.823s

0.238s

unwinding.py

1.082s

93.180s

4.481s

vecf_add.py

9.890s

Failed

0.059s

vecf_dot.py

4.944s

8.434s

0.062s





minibenchmarks




allgroup.py

0.836s

Failed

18.804s

chaos.py

26.268s

Failed

1.392s

fannkuch_med.py

0.990s

1.898s

0.325s

fannkuch.py

10.952s

20.834s

2.057s

Go.py

53.787s

Failed

33.638s

interp2.py

5.521s

10.124s

0.701s

interp.py

10.863s

5.035s

0.563s

nbody_med.py

3.132s

6.642s

0.601s

nbody.py

12.677s

25.540s

1.470s

nq.py

29.879s

Failed

44.418s

raytrace.py

11.608s

Failed

1.228s

spectral_norm.py:

14.388s

118.309s

1.333s

pypy编译除了有颜色背景的数据,其它测试结果基本都是最快的,其中15个程序代码测试结果所花时间不到Cpython的十分之一

 

pypy的缺陷:

  

    可以看出pypy实现python有很大的优势,但是目前来说很多公司的python项目仍然没有采用pypy来实现,原因是


pypy有一个缺陷:C扩展性弱,简单理解就是python程序中如果混合了C/C++代码,调用了C/C++的库,就会导pypy


不支持或者pypy运行速度变慢很多。而现在很多项目都是采用C/C++/Python混合编程。

     

   但是pypy也有自己的兼容C/C++的方法(但是没有完全解决扩展性弱的问题),pypyctypescffi两种方式来


进行C扩展,以下是一些简单程序实验:

      

ctypes的方式实现C++python混合编程,先写一个.cpp然后在python文件中调用它,最后Cpython,和pypy分别编译执行都可以跑,说明ctypes是支持C++扩展的

                 

           

           

          这次用pypy跑的速度就要Cpython不少了

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Pyston与PyPy:为Python提速的两种不同方式

 让Python又快速又稳定的方法是什么?这个问题的答案,取决于你问的是谁。 如果是迅速成长的Pyston项目的创始人Dropbox,那么选择将会是从目前的Python着手,优化它的速度。如果...
  • dj0379
  • dj0379
  • 2016-07-18 23:14
  • 2991

Python状况:为什么PyPy是Python的未来?

Python 现在已经不仅仅是胶水脚本语言了. 不信?看看下面使用Python的成功案例: YouTube - 主要由 Python编写 NASA Industrial Light & Mag...
  • yaofengzhuzhu
  • yaofengzhuzhu
  • 2013-07-14 10:53
  • 1119

PyPy 和 CPython 的性能比较测试

最近我在维基百科上完成了一些数据挖掘方面的任务。它由这些部分组成: 解析enwiki-pages-articles.xml的维基百科转储; 把类别和页存储到MongoDB里面; 对类...
  • langsim
  • langsim
  • 2015-03-17 18:14
  • 1346

Python状况:为什么PyPy是Python的未来?

Python 现在已经不仅仅是胶水脚本语言了. 不信?看看下面使用Python的成功案例: YouTube - 主要由 Python编写 NASA Industrial Light & Magic...
  • langsim
  • langsim
  • 2015-03-17 18:04
  • 442

Python状况:为什么PyPy是Python的未来?

Python 现在已经不仅仅是胶水脚本语言了. 不信?看看下面使用Python的成功案例: YouTube - 主要由 Python编写NASAIndustrial Light & Magic ...
  • walter_chan
  • walter_chan
  • 2015-01-18 15:22
  • 331

PyPy2 v590 Python 2.7.13

  • 2017-12-11 08:58
  • 47.65MB
  • 下载

python语言的jit实现pypy 的原理

  • 2017-10-29 16:05
  • 576KB
  • 下载

数学之路-python计算实战(5)-初识numpy以及pypy下运行numpy

git clone https://bitbucket.org/pypy/numpy.gitcd numpypypy setup.py install
  • u010255642
  • u010255642
  • 2014-07-02 09:18
  • 2323

数学之路-python计算实战(2)-初遇pypy

PyPy是Python开发者为了更好的Hack Python创建的项目。此外,PyPy比CPython是更加灵活,易于使用和试验,以制定具体的功能在不同情况的实现方法,可以很容易实施。 该项目的目标是...
  • u010255642
  • u010255642
  • 2014-06-27 20:20
  • 1715

利用PyCharm进行Python远程调试(pypy环境)

背景描述有时候Python应用的代码在本地开发环境运行十分正常,但是放到线上以后却出现了莫名其妙的异常,经过再三排查以后还是找不到问题原因,于是就在想,要是可以在服务器环境中进行单步跟踪调试就好了。然...
  • epeaktop
  • epeaktop
  • 2017-10-26 14:05
  • 150
    个人介绍
    个人资料
    • 访问:2290112次
    • 积分:26681
    • 等级:
    • 排名:第248名
    • 原创:81篇
    • 转载:1891篇
    • 译文:1篇
    • 评论:134条
    最新评论