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程序执行速度相关推荐

  1. 用PyPy加速Python程序

    用PyPy加速Python程序 在<Python性能优化指南–让你的Python代码快x3倍的秘诀>中有提到,我们可以用更好的Python运行环境或运行时优化来提升Python的速度,其中 ...

  2. 使用Cython提高python代码执行速度

    2022.2.21更新 python程序执行效率是明显低于c的. 优化python代码的一个思路就是:将python的核心代码(一般是需要多次调用,或核心循环部分)转换成c语言. 不需要将程序重新改写 ...

  3. Python源码学习笔记:Python程序执行过程与字节码

    Python程序执行过程与字节码 注:本篇是根据教程学习记录的笔记,部分内容与教程是相同的,因为转载需要填链接,但是没有,所以填的原创,如果侵权会直接删除. 问题: 我们每天都要编写一些Python程 ...

  4. python程序执行提示音——python播放MP3文件

    python程序执行提示音设置 # !pip install playsound from playsound import playsoundif __name__ == "__main_ ...

  5. python程序执行三种方式,Python运行程序的三种方法

    对于python中运行程序的方法,是我们初学时就已经掌握过的了,想必大家会的只是其中的一两种方式. 本篇对程序运行的三种方式进行了整理,分别是:Python的解释器.交互式运行和PyCharm,大家在 ...

  6. 提高python执行效率_关于提高python程序执行效率的思路和想法

    原博文 2016-06-09 22:25 − 相比编译型语言(C系列)python胜在简介的语法和优雅的动态编程体验,但是在执行效率上,python有解释性语言先天的劣势--执行效率较低,为了让编写出 ...

  7. python导包顺序_2019-03-21 python导入包以及Python程序执行顺序理解

    http://codingpy.com/article/python-import-101/ https://segmentfault.com/a/1190000009842139 (一)Python ...

  8. python代码怎么运行-Python程序执行原理,python程序怎么运行的?

    随着人工智能时代的来临,python成为了人们学习编程的首先语言.那么,python程序的程序的执行原理什么呢?python程序怎么运行的?我们下面来介绍下. 我们都知道,使用CC++之类的编译性语言 ...

  9. Python程序执行顺序

    #示例代码基于py3.6 一直对Python程序的执行顺序有些疑惑,例如python程序是顺序执行的,那怎么还有main函数的出现呢? 在查阅了资料后,参见这里后,算是有点明白了: 1.python程 ...

最新文章

  1. AI在管理临床试验设计和执行中,人和机器还在学习曲线上?
  2. dpkg and apt
  3. Quartz Scheduler失火指令说明
  4. 邻接矩阵和邻接表_[力扣743] 带权邻接表的单源最短路
  5. mysql in 多个字段_MySQL如何同时自增自减多个字段
  6. mysql 存儲過程調用_mysql-VS2010+MYSQL 存儲過程調用出錯
  7. ssm+maven+eclipse框架搭建
  8. Nginx学习笔记:基础
  9. Mac OS X Snow Leopard 10.6下载及安装
  10. 计算机图形学的学习心得,计算机图形学学习心得
  11. h3cmsr830series说明书_H3C MSR830路由器怎么设置?
  12. 荣耀linux电脑开机后黑屏,开机黑屏进不了系统,教您解决电脑开机黑屏进不了系统...
  13. java+ElementUI前后端分离旅游项目第七天 权限管理和图形报表
  14. 算法之大数运算加减法源代码
  15. Windows技巧:右键文件打开方式,该文件没有与之关联来执行该操作
  16. 山东省有哪些计算机专业大学排名,山东人工智能专业大学排名
  17. 数据代码分享|Python用NLP自然语言处理LSTM神经网络Twitter推特灾难文本数据、词云可视化与SVM,KNN,多层感知器,朴素贝叶斯,随机森林,GBDT对比
  18. 8051单片机的内核的结构及运行过程解析
  19. 江西省计算机专业好的二本大学排名,2020江西各大学全国排名,一本,二本大学排名.三本院校排名_一品高考网...
  20. 2823【例9.15】潜水员

热门文章

  1. 百度Apollo6.0(5.5)安装
  2. 代数小课堂:向量代数(通过向量夹角理解不同的维度)
  3. 常见的编程语言有哪些?
  4. PHP5.6 配置文件php.ini详解(译版)
  5. return false的作用python_Python关键字return的作用
  6. squeezenet代码解读
  7. [团队] 如何从Coding上拉取代码
  8. etherwake 远程唤醒
  9. 第15日看点:中国女排冲击冠军 谌龙PK李宗伟
  10. 小幺鸡导出PDF失败