Python3 vs Python2 战役摆开,谁将是功能之王?

菜鸟学Python / 2018年09月15日 05:32

健康

哪个版别的 Python 最快?Python 3 真的比 Python 2 慢吗?Python 3 最快的版别是哪个?......

当然,这些问题由多种要素决议,其间的首要的要素是什么呢?咱们又如何为自己的运用寻觅最快的 Python 版别呢?带着这些问题,Hackermoon 上一位叫 Anthony Shaw 的作者为咱们做了一些测验。Anthony Shaw :Dimension Data 的 Talent 集团总监,Python 软件基金会成员,Apache 基金会成员

以下对作者原文的翻译:

运用 Python 功能测验套件

正如之前我在 speed.python.org 网站说到的,Python 中心开发团队十分重视功能问题,这关于比较官方基准和 CPython 版别十分有用。

如图,测验成果很难直观读取

其间不包括 PyPy

你能够经过履行 pip install performance 指令来下载测验套件,然后履行如下指令:pyperformance run --python= -o my_results.json

该指令会针对 Python 的方针版别屡次运转一系列“实践”运用程序,并记载测验成果,取其平均值。

本文我对以下官方版别进行了测验:

Python 2.7.10

Python 3.4.4

Python 3.5.4

Python 3.6.1

Python 3.7 beta 2(译者注:作者进行测验时 Python 3.7 版别还未正式发布,beta 2 功能与正式版十分挨近,相同具有参考价值。Python 3.7 正式发布内容请看这儿)

一起还测验了 PyPy(5.6)和 PyPy 3(5.10.0)。

测验成果

我依据这套测验用例进行了测验,你也能够依据自己的状况自己编写一套测验。

我编写了一个简略的脚本,来取得功能数据文,并将它们制作成了图表。脚本代码你能够在这儿找到:https://gist.github.com/tonybaloney/4e8e45f9128e9eb6e4f36c73ba5e5574

一切图表都以秒为单位,数值越低,表明功能越好。

完好的测验成果及图表展示可请参阅:https://github.com/tonybaloney/performance_testing/tree/master/png

烘托 HTML 模板

django_html 测验将运用 Django 模板烘托引擎来构建一个 150x150 的 HTML 表格。 它利用了 Django 引擎的 Content 和 Template 类。

如图所示,Python 3.7 比 Python 2.7 快 1.19 倍,但除此之外,其他 Python 3 版别都没有 Python 2.7 快。该成果与 speed.python.org 网站的测验成果共同。

PyPy 的测验成果显现,PyPy 比 CPython 的任何 Python 版别都快,PyPy 3 比 PyPy 慢两倍。Django 2.0 及更高版别已决议抛弃对 Python 2 的支撑,因而 PyPy 将不再与 Django 2 兼容。

发动时刻测验

该部分测验解说器的发动时刻

如图所示,Python 2.7 是一切测验版别中发动速度最快的。

注:此处暂不评论 PyPy 的测验成果,文末再谈。

加密测验(Crypto):crypto_paes

在这个测验中,Python 2 的速度显着快于 Python 3,因为 Crypto 要求很多数字运算,而 Python 3 没有 32 位整数类型,只要一个长整型(long integer)。

相同距离比较显着的是,PyPy 3 比 PyPy 慢 5 倍。

算法测验:n-queens

成果显现,在 CPython 系列中,Python 3.7 功能最佳。此外,PyPy 3 和 PyPy 测验成果比较挨近,PyPy 小胜。

浮点运算测验

“浮点”基准测验需求人工创立深重的浮点运算运用程序,在这儿咱们经过 math.cos(),math.sin() 和 math.sqrt() 函数创立,一共创立 10 万个浮点目标。

PyPy 十分合适浮点运算,在很多的数字运算、可猜测的类型和办法以及循环上展示了十分优异的功能。Python 3.7 具有新的办法能快速调用操作码,该操作码正在此测验中刚好用上,体现佳。

正则表达式测验

在这项测验中,我选用了 50 个最受欢迎的网页,并记载了一切正则表达式的操作。 每个操作都被赋予权重,该权重是依据页面盛行度的估量以及在加载每个页面时履行的次数来核算的。 最终,数据中的字母运用 ROT13 进行编码,其方法不会影响正则表达式与输入的匹配程度。

PyPy 的测验成果让人大跌眼镜,不知道它都阅历了些什么......

弥补:后来发现是 PyPy 功能出了问题,PyPy 开发团队后来看到了这项测验成果,花了几个小时把功能问题修正了

Python 3 比 Python 2 快吗?

综上测验所述,答案是 Yes!尽管也有几项测验成果显现 Python 3 比 Python 2 慢:

加密测验:Python 3 的比 Python2 慢 1.35 倍(原因在上文已做解说)

发动时刻测验:Python 3 比 Python 2 慢 1.39 倍

但从全体成果来看,Python 3 更快。CPython 中心开发团队曾表明,发动速度问题是他们在 3.8 和 3.9 版别中着重要处理的问题。

PyPy 很快,我要运用它吗?

PyPy 有 JIT 及时编译器,在履行可猜测的重复性使命时十分高效,而 Python 功能测验需求屡次运转同一段代码来确保准确性,因而,PyPy 面临这样测验功能,体现比 CPython 更佳。

可是,PyPy 的 JIT 编译器的明显缺陷就是发动本钱高,而且,许多 C 言语扩展程序缺少兼容性。别的,因为 PyPy 是用 Python 编写的,许多模板在 PyPy 中无法作业,运用者需求经常进行检查。

PyPy 也相同需求面临从 Python2 向 Python3 改变的问题。PyPy3 还不太安稳,PyTest 就现已抛弃了对 PyPy3 的支撑。

定论

Python 在一切官方版别测验中体现最佳,PyPy 在解说器测验的体现最佳。Python 2 今后会用得越来越少,直到抛弃。假如 PyPy 3 的速度一直不能比 PyPy 快,能有所提高也是好的。

文章转载与网络,如有侵权,请联络删去。

1. 中国品牌新闻网遵循行业规范,任何转载的稿件都会明确标注作者和来源;2. 中国品牌新闻网的原创文章,请转载时务必注明文章作者和"来源: 中国品牌新闻网",不尊重原创的行为 中国品牌新闻网或将追究责任;3.作者投稿可能会经 中国品牌新闻网编辑修改或补充。