总结了这段时间在PyPy上的折腾,早上给同事分享了一下,不过关于PyPy里面还有很多东西需要去理解。这里先把简单介绍版拿出来,其实是做成一个html5的ppt的rst源码。 ppt看这里: Link 下面开始: PyPy简单介绍 胡阳@手机搜狐 date: 2013-06-14 http://www.the5fire.com 什么是PyPy 纯Python实现的Python Rigo: Psyco , 由C编写(2012年终止)简单易用: import psyco psyco.full() 但因为基于C开发,相当于用C重写了CPython,灵活性太差,于是作者就跑去参与了PyPy /download.html virtualenv --no-site-packages -p /home/pypy-2.0.2/bin/pypy pypy-env 实际效果 对于cpu密集型应用比CPython Python本身的发展 + 高效的JIT 为什么PyPy是未来 参考 用 Psyco 让 Python 运行得像 C 一样快 http://en.wikipedia.org/wiki/PyPy http
总得来说就是一个能够提高python运行速度的项目,不过目前没有在网上找到有哪个比较知名的python网站在用pypy,之前Quora中有部分项目使用pypy,貌似现在已经不用了。 如果感兴趣的话,通过下面相关资料会获得更多信息,the5fire对pypy还不是很熟悉。 相关资料: 官网:http://pypy.org/ quora pypy: http://www.quora.com/PyPy PYPY IN PRODUCTION:https://ep2013. europython.eu/conference/talks/pypy-in-production PyPy 简介:http://www.ibm.com/developerworks/cn/opensource /os-pypy-intro/ -
所以,Python根据实现方式不同分为了CPyhton、Pypy、Jython等。 CPython CPython是用C语言实现Pyhon,是目前应用最广泛的解释器。 于是出现了Pypy。 Pypy Pypy是用Python自身实现的解释器。针对CPython的缺点进行了各方面的改良,性能得到很大的提升。最重要的一点就是Pypy集成了JIT。 但是,Pypy无法支持官方的C/Python API,导致无法使用例如Numpy,Scipy等重要的第三方库。这也是现在Pypy没有被广泛使用的原因吧。 以上只是简单介绍了Python,CPython,Pypy,Jython的关系,算是抛砖引玉了。
hg clone https://bitbucket.org/pypy/pypy cd pypy/pypy/goal python ../.. /rpython/bin/rpython --opt=jit targetpypystandalone.py [config opt](http://pypy.readthedocs.org/en/latest
今天主要讲一讲pypy。 我们先来看一个例子: #! 然后我们换一个命令来运行,pypy ? surprise,什么都没做,速度就快了一倍还要多,于是有人就说,这个东西真好用。 这就是JIT的力量,有人说,有些代码,pypy可以做到比c写的还快。 实在是太好用了! 于是,我们继续写一个: #! 然后我们想到了厉害的pypy。看一下效果吧: ? 当然,其实pypy也是可以自己安装包的,只是第一包不多,第二版本比较老,而且。。安装往往会出问题。或者cython才是真正的王道。
1、首先安装pypy 官网:http://pypy.org/ 下载的1.9的,下载完成之后用tar xf 文件名,解压缩。复制pypy-1.9到~/.local/目录下。 在local的bin(如果没有的话,可以自己新建一个bin)下建立一个软链接:ln -s ~/.local/pypy-1.9/bin/pypy ~/.local/bin/ 到此并没有结束,你还需要配置环境变量 最后在终端,输入pypy,是不是像python那样,进入了交互模式,并且多了行类似于这样的提示: [PyPy 1.9.0 with GCC 4.4.3] on linux2 2、安装django 其实是把 source=dlp 解压缩,然后用pypy安装: pypy setup.py install 这个过程中会遇到的问题是:mysql_config not found,查了下发现是没有安装:libmysqld-dev 关于用pypy运行django在性能方面的提升,以后做下测试。在正规的业务代码中测试。
以前没有关注过pypy,但是看到rasperry pi上pypy效果不错,我在服务器上也测试一下。 我的操作系统是CentOS是6.4,64位。 还是直接用rpm安装比较好,通过搜索,直接下载对应操作系统的pypy,当前CentOS6的pypy只有1.9版本,并不是最新的2.0,先测试一下。链接:http://pkgs.org/search/? keyword=pypy 下载完rpm包开始安装,大家注意顺序。 # rpm -ivh pypy-libs-1.9-1.el6.x86_64.rpm # rpm -ivh pypy-1.9-1.el6.x86_64.rpm # rpm -ivh pypy-devel- 测试结果 real 0m9.833s user 0m9.803s sys 0m0.027s 测试效果,pypy比python快差不多4倍。
关于pypy这个东西,搞python有段时间的人应该都知道,我博客之前也写过两篇pypy的文章,有兴趣的可以看看: 什么是pypy pypy运行django+mysql简单教程 这篇文章主要介绍如何安装一个基于 pypy的虚拟环境(virtualenv). 1. 下载pypy 到这里:http://pypy.org/download.html ,下载linux binary的pypy包, 当前最新是2.0.2。然后 tar -xvf 文件名 解压缩。 这样就成功创建了一个基于pypy的虚拟环境,基于pypy的概念就是指默认的python解释器就是pypy。 关于内存的占用 之所以重新开始折腾pypy,除了有工作上的研究需要之外,还有一个目的就是要减少我blog对内存的占用。看到网上有人提到说pypy可以减少内存的使用。
我们可以在ArcGIS之外调用arcpy站点包运行python独立脚本,从而批量化任务提高工作效率。 如果可以把做好的脚本打包成exe是不是就更方便了呢?想想一键式处理也挺开心的。
继续昨天的文章,终于用pypy跑起了Django和MySQL,今天就把blog用pypy在本地跑一下试试。然后顺便用ab测一下,看看效果。 得到的结果是:由pypy运行的gunicorn 平均每秒处理13.32个请求;通过python2.7.3执行的gunicorn,平均每秒处理11.09 个请求。 这个差别并不大,不过关于内存占用的差别倒是挺出乎意料的,基于pypy运行的gunicorn占了300M多的内存,而后者,我之前也说过,30M左右。这个差异还是挺大的。 8438 80% 9181 90% 10498 95% 12012 98% 14026 99% 15469 100% 17179 (longest request) update: pypy 的成员alex写了片关于pypy测试的文章,有兴趣的可以了解下,英文的: http://alexgaynor.net/2013/jul/15/your-tests-are-not-benchmark/
最近 “pypy为什么能让python比c还快” 刷屏了,原文讲的内容偏理论,干货比较少。我们可以再深入一点点,了解pypy的真相。 正式开始之前,多唠叨两句。 这些不同类型的游戏,后端大多是使用的是pypy。对于如何使用pypy,我有一点使用经验可以聊聊。 pypy为什么快 pypy使用python的子集rpython实现了解释器,和前面介绍的Go的自举有点类似。反常识的是rpython的解释器会比c实现的解释器快?主要是因为pypy使用了JIT技术。 在解释语言中,pypy3表现配得上优秀二字。 pypy的特性 pypy还有下面一些特性: cffi pypy推荐使用cffi的方式加载c cProfile pypy下使用cProfile检测性能无效 sys.getsizeof pypy的gc方式差异
而用它们来生成PYPY时,就等同于说,PY生成了自己(假设我们用cpy+rpython生成pypy,这个pypy跟cpy是兼容的)。整个过程rpython只是工具,并不影响我们得到一个原生的pypy。 即生成得到的pypy是最终jitted to c的,其实跟cpy是一样的c based python实现性能上一点不差还较Cpy快。一般说pypy就是pypy实现+rpy工具链。 而lib_py,lib_pypy,就是pypy生成后支持的额外平台模块,lib_py是纯py的,lib_pypy是pypy支持的独有模块 好了,先构建pypy。 因为更能清希化:pypy就是pypy实现+rpy的事实。 然后用高速的pypy还构建hippy,这个pypy-c就是translated版本且with jit的pypy sudo pypy-c .
本文主要介绍的方法就是通过pypy这一工具来提升python运行速度。 1、什么是PyPy PyPy是用Python实现的Python解释器。更为具体的概念可以参考百度百科。 2、Mac上安装PyPy 这里我们使用brew来安装PyPy。首先我们可以看一下有哪些可以安装的PyPy版本,使用如下命令: brew search pypy ? 使用如下命令安装PyPy brew install pypy 等待安装完成即可。 3、PyPy使用pip安装第三方库 PyPy是独立于系统自身的python环境的,所以它不能使用系统自身已经安装的python第三方库,所以使用PyPy运行python程序时,如果涉及到第三方库,会报找不到模块的错误 : pypy get-pip.py 执行完之后,我们就可以使用pypy安装我们需要的第三方库了,比如我们想要安装xlwt: pypy -m pip install xlwt 如果不加pypy -m 则默认安装到你的
而 PyPy,恰好可以解决这一问题。它能够让 Python 代码运行得比 C 还快。 运行结果如下: 运行时间 Python vs PyPy 这不是学术意义上的评估,但该结果是令人惊叹的。与大约需要 10 秒钟的默认 Python 解释器相比,PyPy 仅用 0.22 秒就完成了执行。 而且无需进行任何更改就可以直接将 Python 代码放到 PyPy 上。而同一台计算机上,等效的 C 语言实现需要 0.32 秒,PyPy 甚至击败了最快的 C 语言。 为什么 PyPy 这么快? PyPy 提升速度的秘诀是「即时编译( just-in-time compilation)」,即 JIT 编译。 解释器逐行运行程序 即时编译 PyPy 是利用即时编译来执行 Python 代码的。即 PyPy 不同于解释器,它并不会逐行运行代码,而是在执行程序前先将部分代码编译成机器码。
前两天在家研究了下pypy,顺便也搭建了一个基于pypy的virtualenv环境: 创建基于pypy的virtualenv虚拟环境 ,在上篇文章最后说到在用django处理mysql数据库的时候会出现这个错误
开发者在初次接触PyPy时,往往会通过典型的迭代计算场景验证其性能优势,比如处理百万级数据的遍历与转换任务,CPython的执行时间会随着数据量的增长呈现明显的线性上升趋势,而PyPy则会因为编译优化的加持 开发者在调试过程中,可以通过PyPy提供的类型特化日志,观察到特化的触发次数、优化覆盖的代码范围、类型稳定性的评估指标等关键信息,比如在处理包含条件分支的复杂逻辑时,PyPy的类型推断不仅能精准捕捉主流执行路径的类型特征 PyPy则通过构建完善的兼容层与优化专属接口,在保持Python语法语义完全一致的前提下,实现了对标准库的全面支持,无论是字符串处理、文件操作等基础功能,还是网络通信、多线程等高级特性,PyPy都能与CPython 在技术迭代的过程中,PyPy团队不断攻克动态语言优化的核心难题,比如类型推断的精准度提升、垃圾回收的停顿时间压缩、编译优化的效率平衡等,每一次技术突破都让PyPy的性能表现迈上新的台阶。 面向未来,PyPy的发展方向更加清晰,多核心优化是其重点攻坚的领域,通过突破全局解释器锁的限制,PyPy有望充分利用多核CPU的算力优势,让Python在高并发场景中展现出更强的性能;
而后,在pypi上查看MySQLdb的包时发现一个github链接,上去看了下,comment中含有fixed pypy一类的字样,这说明什么?! 显然是针对pypy做了些调整的,于是clone下来,checkout到一个pypy-fixes的分支,setup,测试下数据库创建,添加中文信息,完全没有问题。显然这是正确的包了。 于此同时,也在pypy所托管的bitbucket上发现了一些说明,说MySQL-python已经可以支持pypy了,不过至少需要1.2.4c1才行。 相关链接: https://bitbucket.org/pypy/compatibility/wiki/mysql-python https://github.com/farcepest/MySQLdb1 /tree/pypy-fixes
PyPy 团队 21 日通过官方博客正式发布了两个全新版本:PyPy2.7 v5.7 和 PyPy3.5 v5.7,即支持 Python v2.7 语法和 Python v3.5 语法的 PyPy 全新版本解释器 这一点或许从另一个侧面反映了 PyPy 的改变:如果需要,未来 PyPy 可以支持更多的最新特性。 此前 PyPy2(基于 Python 2.x )的开发进度一直领先于 PyPy3(基于 Python 3.x ),这次 PyPy2 也没有落后。 关于这一点,目前一个有效的解决方案是直接把 C 扩展包移植到 PyPy,就像 NumPy 在 PyPy 下的分支版本 NumPyPy 那样,充分利用 PyPy 的原生接口来集成 C 代码。 PyPy 博客地址:https://morepypy.blogspot.com/2017/03/pypy27-and-pypy35-v57-two-in-one-release.html PyPy 最新代码地址
PyPy语言系统就是一个编译器框架,完成可以拿来跟llvm+terracling结合效果相比,与llvm这种忠实地从0开始再造轮子的方法相比,pypy似乎更聪明一点,它重用轮子,它极力促成的结果是:使py 注意这里的1)pypy代码,2)rpython表示,和3)jit运行代码。用户写的是pypy代码,不运行,rpython仅用于工具链表示,产生的c代码才进入到运行,而jit过后才实际运行。 最后说它的缺点,由于pypy实际上不面向混合来自C语言的扩展,PyPy有很弱的C语言扩展性。它支持C语言扩展,但是比Python本身的速度还慢。 但是要说这是PYPY的缺点分明是无理取闹嘛,直接将逻辑写在纯PYPY上,开启JIT就好了。 pypy:更合理的断层,jitted2c使其跨系统和应用二栈,jitted2js使其跨任意全栈 ----- 最后,pypy jitted to c的特点使得pypy可以跨系统和应用二栈,因为传统C系开发发布的那些领域就代表了整个系统开发栈
而 PyPy,恰好可以解决这一问题。它能够让 Python 代码运行得比 C 还快。 运行时间 Python vs PyPy 这不是学术意义上的评估,但该结果是令人惊叹的。与大约需要 10 秒钟的默认 Python 解释器相比,PyPy 仅用 0.22 秒就完成了执行。 而且无需进行任何更改就可以直接将 Python 代码放到 PyPy 上。而同一台计算机上,等效的 C 语言实现需要 0.32 秒,PyPy 甚至击败了最快的 C 语言。 为什么 PyPy 这么快? 解释器逐行运行程序 即时编译 PyPy 是利用即时编译来执行 Python 代码的。即 PyPy 不同于解释器,它并不会逐行运行代码,而是在执行程序前先将部分代码编译成机器码。 ? 这也就是为什么PyPy可以让Python有这么快的执行速度了。目前,大部分的使用者还保持使用着默认的Python编译器,如果对速度有要求不妨可以试试PyPy编译器 ?