用 PyPy 让你的 Python 代码运行得更快
文章插图
Python是开发人员中最常用的编程语言之一 , 但它有一定的局限性 。 例如 , 对于某些应用程序而言 , 它的运行速度可能比其它语言低100倍 。 这就是为什么当Python的运行速度成为用户瓶颈后 , 许多公司会用另一种语言重写他们的应用程序 。 但是有没有一种方法既可以保持Python的特性又能提高速度呢?它就是PyPy 。
PyPy是一种非常兼容的Python解释器 , 它是CPython2.7、3.6和即将推出的3.7的一种值得替代的方法 。 在安装和运行应用程序时使用它 , 可以显著提高速度 。 速度提高多少取决于你运行的应用程序 。
在本教程中 , 您将学习:
- 如何使用PyPy安装和运行代码
- PyPy与CPython在速度方面的比较
- PyPy的功能及其如何使Python代码更快地运行
- 本教程中的示例使用 Python 3.6, 因为它是PyPy兼容的最新 Python 版本 。
Python解释器可以用多种语言来实现 , 如CPython(用C编写)、Jython(用Java编写)、Iron Python(用.NET编写)和PyPy(用Python编写) 。
CPython是Python解释器的最初实现 , 也是迄今为止使用最广和最多维护的 。 当我们从Python官方网站下载并安装好Python 3.x后 , 我们就直接获得了一个官方版本的解释器:CPython 。 这个解释器是用C语言开发的 , 所以叫CPython 。 在命令行下运行python就是启动CPython解释器 。
但是 , 由于CPython是一种高级的解释语言 , 因此它有一定的局限性 , 并且在速度方面没有任何优势 。 这就是PyPy可以起作用的地方 。 由于它符合Python语言规范 , 因此Py Py不需要对代码库进行任何更改 , 并且可以通过下面的功能显著提高速度 。
现在 , 您可能想知道 , 如果CPython使用相同的语法 , 为什么它不实现Py Py的强大功能 。 原因是 , 实施这些功能需要对源代码进行巨大的更改 , 这将是一项非常繁琐的工作 。
我们来粗略看一下如何在实际操作中使用PyPy 。
安装
您的操作系统可能已提供PyPy软件包 。 例如 , 在Mac OS上 , 您可以在Homebrew的帮助下安装它:
$ brew install pypy3或者您也可以下载与操作系统匹配的二进制文件 。 完成下载后 , 只需打开tarball或ZIP文件即可 。 然后 , 您可以执行以下操作:$ tar xf pypy3.6-v7.3.1-osx64.tar.bz2$ ./pypy3.6-v7.3.1-osx64/bin/pypy3Python 3.6.9 (?, Jul 19 2020, 21:37:06)[PyPy 7.3.1 with GCC 4.2.1]Type "help", "copyright", "credits" or "license" for more information.您需要在上述文件夹地址执行该命令 。 有关完整的说明 , 请参阅安装文档 。运行 PyPy
您现在已经安装了Py Py , 并且即将运行它!为此 , 请创建一个名为script.py的Python文件 , 并将以下代码放入其中:
total = 0for i in range(1, 10000):for j in range(1, 10000):total += i + jprint(f"The result is {total}")在两个嵌套的for循环中 , 将1到9,999之间的数字相加 , 并打印结果 。查看运行此脚本需要多长时间:
import timestart_time = time.time()total = 0for i in range(1, 10000):for j in range(1, 10000):total += i + jprint(f"The result is {total}")end_time = time.time()print(f"It took {end_time-start_time:.2f} seconds to compute")该代码现在执行以下操作:- 第3行将当前时间保存到变量start_time 。
- 第5至8行运行循环 。
- 第10行打印结果 。
- 第12行将当前时间保存为end_time 。
- 第13行打印开始时间和结束时间之间的差值 , 以显示运行脚本所需的时间 。
$ python3.6 script.pyThe result is 999800010000It took 20.66 seconds to compute现在使用Py Py运行它:$ pypy3 script.pyThe result is 999800010000It took 0.22 seconds to compute在这个小实验中 , PyPy的速度大约是Python的94倍!您可以通过浏览 PyPy Speed Center 来查看更多严格的测试 。
请记住 , PyPy如何影响代码的性能取决于您用代码来做什么 。 在某些情况下 , Py Py实际上较慢 , 稍后会看到 。 但是 , 就几何平均而言 , 它的速度是Python的4.3倍 。
PyPy及其特性
Py Py有两种定义:
1、用于生成动态语言解释器的动态语言框架 2、使用该框架的Python实现
您应该已经意识到了第二个问题 。 您使用的Python实现是使用称为RPython的动态语言框架编写的 , 就像CPython是用C编写的 , 而Jython是用Java编写的一样 。
但之前文中不是提到PyPy是用Python编写的吗?嗯 , 这有点简单 。 PyPy成为用Python编写的Python解释器(而不是RPython)这么说的原因是RPython使用了与Python相同的语法 。
- 看不上|为什么还有用户看不上华为Mate40系列来看看内行人怎么说
- 空调|让格力、海尔都担忧,中国取暖“新潮物”强势来袭,空调将成闲置品?
- 采用|消息称一加9系列将推出三款新机,新增一加9E
- 会员|美容院使用会员管理软件给顾客更好的消费体验!
- 行业|现在行业内客服托管费用是怎么算的
- 闲鱼|电诉宝:“闲鱼”网络欺诈成用户投诉热点 Q3获“不建议下单”评级
- 美国|英国媒体惊叹:165个国家采用北斗将GPS替代,连美国也不例外?
- 手机|这个超强App,让手机快3倍,流畅到起飞
- 桌面|日常使用的软件及网站分享 篇一:几个动态壁纸软件和静态壁纸网站:助你美化你的桌面
- 同轴心配合|用SolidWorks画一个直角传动,画四个零件就行
