使用PyPy加快Python程序执行速度
Python可以说是近年来比较火的编程语言之一了,Python的优点就不多说了,写过Python的同学应该都有所体验,Python独有的一些特性,写起来真实太舒服了,但是老实讲,Python也没有像各种广告上说的那样,上天入地、开发办公,无所不能的,而且相对其他语言也是有劣势存在的,比如对于某些应用程序来说,Python的运行速度可能比其它语言低上百倍。对于对响应速度有一定要求的系统来说,Python不一定是最好的选择,我就经历过负责的Python项目被使用Java重构,重构的原因是响应速度没有达到期待的效果。那么有没有方法可以提高Python的运行速度呢?那就是使用PyPy。
PyPy是什么
Python的官方解释器是CPython解释器,是用C语言开发实现的,所以叫CPython。CPython是至今为止使用最广泛、也是维护的最好的Python解释器。也有其他语言实现的解释器,如IPython:基于CPython之上的交互式解释器;Jython:使用Java语言实现的解释器;PyPy也是其中之一,pypy使用了即时编译( just-in-time compilation),即JIT编译,可以对Python代码进行动态编译,加速执行速度,同时与Cpython高度兼容,语法也基本一致。
使用PyPy
安装及使用
根据自己的系统下载压缩包: Download and Install
此处以linux版本为例。下载完毕之后进行解压:
tar xf pypy3.7-v7.3.5-linux64.tar.bz2./pypy3.7-v7.3.5-linux64/bin/pypy3.7Python 3.7.10 (77787b8f4c49, May 15 2021, 11:50:33)
[PyPy 7.3.5 with GCC 7.3.1 20180303 (Red Hat 7.3.1-5)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>>
官网文档:Downloading and Installing PyPy — PyPy documentation
安装完毕之后,我们的python代码就可以通过PyPy去执行。 只有PyPy也是不够的,还需要安装一些别的库,需要先安装PyPy的pip: 使用pypy3 -m ensurepip
进行安装。
安装完毕之后PyPy的bin目录下会有pip3及pip3.7,我们就可以通过它们来安装我们需要的其他的库了。
与CPython对比
新建test.py,写入以下代码,分别使用CPython解释器和PyPy解释器运行test.py文件,对比一下运行时间。
import timestart = time.time()
for j in range(10000):for i in range(10000):total = i * jend = time.time()
print("运行时间:", end - start)
CPython:
python test.py
运行时间: 11.55064606666565
PyPy:
./pypy3.7-v7.3.5-linux64/bin/pypy3.7 test.py
运行时间: 0.250166654586792
通过结果可以看出PyPy的运行速度确实要比CPython快很多。
PyPy的局限性
看到这里,可能会想,PyPy运行速度比CPython要快,代码语法也基本兼容,为什么没有取代CPython或者没有被广泛使用呢?那是因为PyPy虽然运行速度快,但是也有局限性。下面就来简单说一下。
不适用于C扩展
PyPy适用于使用纯Python代码编写的程序,但是只要用到了C扩展库(如Numpy、SciPy等),它的运行速度不仅不会加快,反而会比使用CPython慢。原因是C扩展库都是基于CPython设计实现的,PyPy还不完全支持C扩展库,没办法对使用C扩展的程序进行优化,进而会变慢。PyPy官方今年来也在处理C扩展库的问题,有些扩展库已经被移植到PyPy,但是还是有一定劣势的。所以如果你的应用程序中使用的C扩展库,还是使用CPython解释器比较好。
生态问题
Python第三方库可以说非常丰富且强大了,而这些库大都是基于CPython实现的,PyPy兼容的库真是少之又少,这样使用的人也就很少,也就没有很多开发者为PyPy做出贡献,导致兼容的库越来越少,这就是一个恶性的循环。简单来说,就是生态不行。
PyPy不适合短时间运行的程序
如果程序运行的时间越长,PyPy可以收集更多的运行时的信息并对程序的执行做出更多的优化。 但是如果一个程序没有运行至少几秒钟,那么PyPyJIT编译器将没有足够的时间来预热,不仅不会加快运行速度,反而会变慢。
总结
如果你的项目是纯Python编写的业务系统,那么可以尝试一下PyPy,或许有意想不到的效果,如果有用到C扩展模块,那还是老老实实使用CPython吧。
使用PyPy加快Python程序执行速度相关推荐
- 用PyPy加速Python程序
用PyPy加速Python程序 在<Python性能优化指南–让你的Python代码快x3倍的秘诀>中有提到,我们可以用更好的Python运行环境或运行时优化来提升Python的速度,其中 ...
- 使用Cython提高python代码执行速度
2022.2.21更新 python程序执行效率是明显低于c的. 优化python代码的一个思路就是:将python的核心代码(一般是需要多次调用,或核心循环部分)转换成c语言. 不需要将程序重新改写 ...
- Python源码学习笔记:Python程序执行过程与字节码
Python程序执行过程与字节码 注:本篇是根据教程学习记录的笔记,部分内容与教程是相同的,因为转载需要填链接,但是没有,所以填的原创,如果侵权会直接删除. 问题: 我们每天都要编写一些Python程 ...
- python程序执行提示音——python播放MP3文件
python程序执行提示音设置 # !pip install playsound from playsound import playsoundif __name__ == "__main_ ...
- python程序执行三种方式,Python运行程序的三种方法
对于python中运行程序的方法,是我们初学时就已经掌握过的了,想必大家会的只是其中的一两种方式. 本篇对程序运行的三种方式进行了整理,分别是:Python的解释器.交互式运行和PyCharm,大家在 ...
- 提高python执行效率_关于提高python程序执行效率的思路和想法
原博文 2016-06-09 22:25 − 相比编译型语言(C系列)python胜在简介的语法和优雅的动态编程体验,但是在执行效率上,python有解释性语言先天的劣势--执行效率较低,为了让编写出 ...
- python导包顺序_2019-03-21 python导入包以及Python程序执行顺序理解
http://codingpy.com/article/python-import-101/ https://segmentfault.com/a/1190000009842139 (一)Python ...
- python代码怎么运行-Python程序执行原理,python程序怎么运行的?
随着人工智能时代的来临,python成为了人们学习编程的首先语言.那么,python程序的程序的执行原理什么呢?python程序怎么运行的?我们下面来介绍下. 我们都知道,使用CC++之类的编译性语言 ...
- Python程序执行顺序
#示例代码基于py3.6 一直对Python程序的执行顺序有些疑惑,例如python程序是顺序执行的,那怎么还有main函数的出现呢? 在查阅了资料后,参见这里后,算是有点明白了: 1.python程 ...
最新文章
- AI在管理临床试验设计和执行中,人和机器还在学习曲线上?
- dpkg and apt
- Quartz Scheduler失火指令说明
- 邻接矩阵和邻接表_[力扣743] 带权邻接表的单源最短路
- mysql in 多个字段_MySQL如何同时自增自减多个字段
- mysql 存儲過程調用_mysql-VS2010+MYSQL 存儲過程調用出錯
- ssm+maven+eclipse框架搭建
- Nginx学习笔记:基础
- Mac OS X Snow Leopard 10.6下载及安装
- 计算机图形学的学习心得,计算机图形学学习心得
- h3cmsr830series说明书_H3C MSR830路由器怎么设置?
- 荣耀linux电脑开机后黑屏,开机黑屏进不了系统,教您解决电脑开机黑屏进不了系统...
- java+ElementUI前后端分离旅游项目第七天 权限管理和图形报表
- 算法之大数运算加减法源代码
- Windows技巧:右键文件打开方式,该文件没有与之关联来执行该操作
- 山东省有哪些计算机专业大学排名,山东人工智能专业大学排名
- 数据代码分享|Python用NLP自然语言处理LSTM神经网络Twitter推特灾难文本数据、词云可视化与SVM,KNN,多层感知器,朴素贝叶斯,随机森林,GBDT对比
- 8051单片机的内核的结构及运行过程解析
- 江西省计算机专业好的二本大学排名,2020江西各大学全国排名,一本,二本大学排名.三本院校排名_一品高考网...
- 2823【例9.15】潜水员