本文所选的python版本:
2.7.10,
3.4.4,
3.5.4,
3.6.1,和
3.7(我有beta 2)。
此外,这包括pypy(5.6。)和pypy3(5.4.10)。
呈现html模板
该django_html测试将使用django模板渲染引擎,以建立一个150×150的html表格。它利用了django引擎的内容和模板类。
python 3.7的速度比python 2.7快1.19倍,但是它是唯一一个能够击败我运行的python 2.7基准的python 3.x版本。speed.python.org基准测试显示类似的结果。
pypy可以摧毁任何cpython结果,但pypy3会比pypy慢两倍。值得注意的是django最近决定在django 2.0及更高版本中放弃对python 2的支持,这意味着pypy将不再与django 2兼容。
启动时间
该测试只是测试解释器启动所花费的时间。如果您通过运行多个进程来解决python的“gil”约束,那么这将非常重要。
cryptography: crypto_paes
在这个测试中,你会看到python 2和3之间的速度明显下降。为什么?加密需要大量的数字运算,python 3不再具有32位整数类型,只有一个(非常)长整数。
pypy用户 - 您会注意到pypy3 比pypy 慢5倍!
n-queens:算法测试
在cpython系列中,3.7 又一次出现,但值得注意的是pypy和pypy3的结果非常相似。
浮点运算
“浮动”的基准是一种人为的,浮点运算繁重的应用程序,将创建计算10万点的对象math.cos(),math.sin()和math.sqrt() 。
这是pypy的完美应用,大量的数据处理,可预测的类型和方法以及循环。python 3.7具有新的快速方法调用操作码,该操作码正在此测试中使用。
常用表达
在正则表达式测试中,“网络上最流行的网页有50个,并记录了所有正则表达式操作。每个操作都有一个权重,它是根据页面出现的热门程度以及加载每个页面时执行的次数来估算的。最后,使用rot13对数据中的字母进行编码,这样不会影响正则表达式匹配其输入的方式。“
那么python 3比python 2更快吗?
是! 在几乎所有的测试中。值得注意的例外是crypto_paes测试,python 3的速度慢了1.35倍(因为整数类型),python_startup的速度慢了1.39倍。
缓慢的python 3启动是核心cpython团队正在为3.8,3.9版本开发的问题之一。
除了这两项测试外,python 3在这些基准测试中的速度大约快1.2-1.3倍。今年晚些时候,你会看到升级到python 3.7的改进。
为什么pypy要快得多,为什么不是每个人都使用它呢?
pypy比cpython快,因为它具有即时编译器。jit编译器具有很大的好处,因为它们在执行可预测的重复性任务时非常高效。基准的其中一个特点是,您尝试多次运行同一段代码以使其准确无误,推送应用程序并减少错误边界。正如pypy照耀这些测试。
jit编译器,尤其是pypy的缺点是启动成本高。另一个缺点是许多c-extensions缺乏兼容性。因为“python”(cpython,官方的psf python)是用c语言编写的,pypi上的许多第三方扩展利用了这一点。numpy就是一个很好的例子,numpy的大部分都是用优化的c代码编写的。当你pip install numpy使用本地c编译器并为你的python运行时建立一个二进制库来使用。
由于pypy是用python编写的,很多模块根本无法在pypy中工作。
此外,pypy也遭遇了与cpython相同的挑战 - 从语言版本2转移到版本3. pypy3直到最近我发现它仍然不稳定,在基准测试中,您仍然可以看到与pypy的奇怪不一致。我还遇到了一些软件包问题(例如pytest),他们放弃了对pypy3的支持,但他们解决了问题。