python的未来-pypy
来源:互联网 发布:收款语音播报软件 编辑:程序博客网 时间:2024/04/30 11:30
PyPy是一个虚拟机项目,主要分为两部分:一个python的实现和 一个编译器
PyPy的第一部分: 用Python实现的Python
其实这么说并不准确,准确得说应该是用rPython实现的Python,rPython是Python的一个子集,虽然rPython不是完整的Python,但用rPython写的这个Python实现却是可以解释完整的Python语言。
PyPy的第二部分:编译器
这是一个编译rPython的编译器,或者说这个编译器有一个rPython的前端,目前也只有这么一个前端,不过它的后端却是不少,也就是说这个编译器支持许多的目标语言,比较重要的有:C,CIL,Javascript...
第一部分看成pypy(1)第二部分看成pypy(2)
为什么你在同一层面下同时需要这两者?你可以这样想一下:PyPy(1)是一个用RPython写的解释器,因此它能加
载用户的Python代码并将它编译成字节码。但是这个用RPython写的解释器本身要能运行,就必须要被另外一个
Python实现去解释。我们可以直接用CPython去.运行这个解释器。但是这个还不够快取而代之,我们使用了
PyPy(2)去编译这个PyPy的解释器,生成其他平台(比如C,JVM或CLI)代码在我们的机器上运
行,并且还加入了JIT特性。JIT能够把字节码转换成机器语言,pypy之所以快,是因为它整合了JIT跟踪技术的优化
编译器。
pypy性能测试
i
Cpython2.7.6,pyston0.2,pypy2.2.1的性能对比,使用的是pyston源代码目录下的minibenchmarks和microbenchmarks中
的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++的方法(但是没有完全解决扩展性弱的问题),pypy有ctypes和cffi两种方式来
进行C扩展,以下是一些简单程序实验:
用ctypes的方式实现C++,python混合编程,先写一个.cpp然后在python文件中调用它,最后用Cpython,和pypy分别编译执行都可以跑,说明ctypes是支持C++扩展的
这次用pypy跑的速度就要Cpython不少了
- python的未来-pypy
- python的未来-pypy
- Python状况:为什么PyPy是Python的未来?
- Python状况:为什么PyPy是Python的未来?
- Python状况:为什么PyPy是Python的未来?
- Python的未来就要看Pyston和PyPy,目前我比较看重Pyston
- python程序的pypy加速
- pypy -- 用python实现的python
- Python, CPython, Pypy, Jython的简单介绍
- Python, CPython, Pypy, Jython的简单介绍
- 【Python】使用pypy加速
- pypy确实要比我们平时用的python快
- 安装PYPY 和对应的 pypy pip
- pypy的速度
- pypy的速度
- PyPy和CPython的不同点
- Pyston与PyPy:为Python提速的两种不同方式
- Python的各种解释器实现CPython | PyPy | Jython | IronPython等
- 自体脂肪移植隆胸的最佳时机
- Managing Accounts
- i os info.plist常用的Key
- C语言--Can you find it?
- Linux内核同步-基本概念
- python的未来-pypy
- i os iphone打电话后回到自己的应用
- php源代码安装常见错误与解决办法
- hihocoder 1014 Trie树 trie
- linux内核同步(2)--原子操作
- 出现Field 'ssl_cipher' doesn't have a default value错误怎么解决???
- 多线程篇4 线程状态的改变
- G2一个稳定快速省电的ROM
- java中的多线程