2020年用Python3就对了!Python 3比Python 2慢吗?哪一个版本的Python 3最快?不要再纠结Python哪个版本好!还有什么其他措施可以提高速度?哪个版本的Python最快?当然,“它取决于”许多因素,但是它取决于什么,我们应该如何为我们的应用程序找到最快的Python版本?关于这些问题,今天我将尝试做一些测试。
使用Python性能测试器
正如我之前在speed.python.org网站上提到的,Python的核心团队非常关心性能,这对于比较CPython版本的“官方”基准非常有用。
然而,在这个测试中仍然存在一些问题:
测试结果不容易理解。
PyPy不包括在测试中。
首先,执行命令pip安装性能下载测试程序,然后执行以下命令:
py performance run-python={ choosed _ python _ runtime }-o my _ results . JSON
该指令将多次运行一系列针对Python目标版本的“真实”应用程序测试程序,并记录测试结果的平均值。
在本文中,我主要测试了以下版本的Python:
2.7.10,
3.4.4、
3.5.4、
3.6.1、
3.7(beta 2).
此外,还测试了PyPy(5.6)和PyPy3(5.4.10)。
试验结果
我已经根据这组测试用例进行了测试,每个人都可以查看测试结果。当然,您也可以编写自己的测试用例并运行自己的测试。
我还编写了一个简单的脚本来获取性能数据文件列表,并为每个测试结果制作了一个非常直观的图表。我把这个脚本的代码放到了GitHub上(见文章末尾的链接)。
在所有图表中,结果以秒为单位,数值越低,性能越好。
有关完整的测试结果和图表,您可以查看以下链接:
我认为重要的测试包括在里面。其余的测试与已经进行的测试相似,并且已经包含在结论中。
可以参考我之前的文章:
python字符串中字符出现次数(python获取字符串个数)
ModuleNotFoundError: No module named 'win32api' 问题解决
呈现HTML模板
django_html测试将使用django模板呈现引擎创建一个150行150列的html表。它使用Django引擎的内容和模板类。Python3.7比Python 2.7快1.19倍,但是除了Python3.7之外,所有版本的Python 3都比Python 2.7慢。该结果与speed.python.org网站的测试结果一致。
PyPy的测试结果显示,它比任何Python版本的CPython运行得都快,而Py3的速度是PyPy的两倍。应该注意的是,Django最近决定放弃对Django 2.0及更高版本中的Python 2的支持,这意味着PyPy将不再与Django 2兼容。
开始时间
该测试主要用于测试Python解释器启动所需的时间。如果您计划运行多个进程来打破Python的“GIL”约束,这一点非常重要。
我将跳过pypypy,尤其是PyPy3,我将在文章的最后讨论它。
从上图可以看出,Python 2.7的启动时间最短。
加密测试:crypto_paes
在加密测试中,您会发现Python 2比Python 3快得多。原因是什么?因为加密需要大量的数字运算,所以Python 3丢弃32位整数,代之以长整数。
对于PyPy用户,你应该注意到Py3比PyPy慢5倍!
算法测试:n皇后
这个算法可能不会让每个人都感到舒服。用这种算法进行测试可能会带回一些人在算法课上经历过的不愉快记忆。对此我只能说抱歉。这个算法的规则实际上非常简单,即在棋盘上放置n个“皇后”,以确保任何两个“皇后”不在同一行、同一列或同一斜线上,这样它们就不能互相攻击。
在CPython系列中,Python3.7再次在性能方面领先。另外,PyPy和Py3的测试结果非常相似。
浮点操作
在浮点操作的测试中,我将通过math.cos()、math.sin()和math.sqrt()人工创建一个重浮点操作应用程序,总共创建100,000个浮点对象。
从测试结果可以看出,PyPy非常适合浮点操作。PyPy在大量数据处理、可预测的类型和方法以及周期方面显示出了出色的性能。因为Python 3.7有一个新的快速方法调用操作码,所以它是CPython中最快的。正规表达式
在正则表达式测试中,“我使用了网络上50个最流行的网页,并记录了所有的正则表达式操作。每个操作都有一个权重,该权重是根据页面的受欢迎程度和每个页面的加载次数来计算的。最后,ROT13用于对数据中的字母进行编码,这不会影响正则表达式匹配其输入的方式。”
在这次测试中,我不知道PyPy有什么问题。我想知道其他人是否会得到同样的结果!
Python 3比Python 2快吗?
是的。在大多数测试中,Python3比Python2快。然而,有几个例外值得注意。在加密测试中,由于整型数据类型,Python 3比Python2慢1.35倍。在启动时间测试中,Python3比Python2慢1.39倍。
Python 3的缓慢启动将是CPython核心团队在3.8和3.9版本中解决的主要问题之一。
除了加密和启动时间测试,在其他测试项目中,Python 3比Python2快1.2-1.3倍。改进后的Python 3.7升级将在今年年底推出。
既然PyPy快得多,为什么每个人都不使用它呢?
PyPy有一个实时编译器,所以它比CPython快。JIT编译器有很大的好处,因为它们在执行可预测的重复任务时非常高效。Python性能测试的一个特点是,您需要多次运行相同的代码以使其准确,从而减少应用程序的错误边界。因此,PyPy在这种测试中有更好的性能。
JIT编译器最明显的缺点,尤其是PyPy的JIT编译器,是启动成本高。另一个缺点是许多C语言扩展缺乏兼容性。因为“Python”(cpython,官方PSF Python)是用c语言编写的,所以PyPi上的许多第三方扩展都利用了这一点。努皮就是一个很好的例子。努皮的大部分代码都是用优化的C语言编写的。当您执行pip install numpy命令时,它使用本地c编译器为您的Python运行时为Python程序构建一个二进制库。
由于PyPy是用Python编写的,许多模块根本不能用PyPy工作,所以您需要经常检查。此外,PyPy还需要面对与CPython相同的挑战:从Python2转变为Python3。直到最近,我仍然发现PyPyPyPyP3不稳定,一些奇怪的结果仍然出现在测试中。其他一些软件包遇到了问题,比如PyTest,所以他们放弃了对PyPyPyP3的支持。
结论
Python 3.7是最快的“官方”Python版本,PyPy是我测试过的最快的解释器。
如果PyPy 2在未来的使用越来越少,即使PyPy33不能比PyPy更快,我希望它的速度会提高。
更多的Python视频、源代码和材料都是免费的。
如果您有互联网问题,也可以咨询我,谢谢!如果你也想一起学习人工智能,欢迎留言交流。