侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

聊聊Python中的pypy

Python  /  管理员 发布于 7年前   374

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性能测试

Cpython2.7.6,pyston0.2,pypy2.2.1的性能对比,使用的是pyston源代码目录下的minibenchmarks和microbenchmarks中
的python代码来跑,对比结果如下表所示

 


 

Cpython2.7.6

pyston0.2

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的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!


  • 上一条:
    使用C++扩展Python的功能详解
    下一条:
    Python中实现switch功能实例解析
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客