哪个版本的Python最快?当然,这些问题是由很多因素决定的,其中主要的因素有哪些呢?我们如何为我们的应用程序找到最快的Python版本?带着这些疑问,Hackermoon上一位名叫AnthonyShaw的作者为我们做了一些测试。AnthonyShaw:DimensionData人才组总监,Python软件基金会成员,Apache基金会成员该团队非常重视性能问题,这对于将官方基准与CPython版本进行比较很有用。如图所示,测试结果难以直观阅读。不包括PyPy。您可以通过执行pipinstallperformance命令下载测试套件,然后执行以下命令:pyperformancerun--python={chosen_python_runtime}-omy_results.json该命令将针对目标版本的Python运行一系列“real"多次申请,并记录测试结果,取其平均值。在这篇文章中,我测试了以下官方版本:Python2.7.10Python3.4.4Python3.5.4Python3.6.1Python3.7beta2非常接近官方版本,也有参考价值。Python3.7正式版请看这里)同时还测试了PyPy(5.6)和PyPy3(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引擎的内容和模板类。如图所示,Python3.7比Python2.7快1.19倍,但除此之外,没有其他Python3版本比Python2.7快。这个结果和speed.python.org网站的测试结果是一致的。PyPy的测试结果表明PyPy比任何Python版本的CPython都快,PyPy3比PyPy慢两倍。Django2.0及以后已经决定放弃对Python2的支持,所以PyPy将不再兼容Django2。启动时间测试这部分测试解释器的启动时间如图所示,Python2.7启动最快所有测试版本。注意:这里不讨论PyPy的测试结果,文末再说。加密测试(Crypto):crypto_paes在这个测试中,Python2明显快于Python3,因为Crypto需要大量的数字运算,而Python3没有32位整数类型,只有长整型(longinteger).同样的差距更明显,PyPy3比PyPy慢了5倍。算法测试:n-queens结果表明,在CPython系列中,Python3.7表现最好。另外,PyPy3和PyPy的测试结果比较接近,PyPy略胜一筹。浮点运算测试“浮点”基准测试需要手动创建大量浮点运算应用程序,这里我们通过math.cos()、math.sin()和math.sqrt()函数创建,总共创建了100,000个浮点对象。PyPy非常适合浮点运算,在大量运算、可预测的类型和方法以及循环方面表现出出色的性能。Python3.7新增了一种快速调用操作码的方法,恰好在本次测试中表现良好。正则表达式测试为了这个测试,我取了50个最流行的网页,记录了所有的正则表达式操作。每个操作都被赋予一个权重,该权重是根据对页面受欢迎程度的估计以及每个页面加载时执行的次数计算得出的。最后,数据中的字母使用ROT13编码,其方式不会影响正则表达式与输入的匹配程度。PyPy的测试结果很神奇,不知道经历了什么……补充:PyPy后来看到了测试结果,花了几个小时修复了问题。Python3比Python2快吗?根据以上测试,答案是肯定的!虽然有几个测试结果表明Python3比Python2慢:加密测试:Python3比Python2慢1.35倍(原因上面有解释)启动时间测试:Python3比Python2慢1.39倍但是从总体结果看,Python3更快。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在解释器测试中表现最好。Python2以后用的会越来越少,直到被抛弃。如果PyPy3仍然不比PyPy快,那么很高兴看到一些改进。
