为什么 PyPy3 比 Python3 更受欢迎?
“如果你想让你的代码运行得更快,你应该只使用 PyPy。”
— Guido van Rossum( Python的创造者)如果你曾经用Python编写过代码,你就会知道它比其他一些流行的编程语言慢了多少。在大多数在线代码评委中, Python的时间限制是 C 的 5 倍多, Java的 2 倍多。
Python的执行时间通常要多出 10 到 100 倍的原因是它是一种动态类型的高级语言。无论您的代码如何优化,它在执行时间上都无法超越 C/C++。然而, Python是一种有趣且易于使用的语言,这就是为什么使用它可以更快地构建程序的原因。
为了解决这个问题,我们先来了解一下Python是什么
Python不是一种单一的语言,而是一种实现Python代码的方式。默认和最广泛使用的Python实现是 CPython。 CPython中代码的执行流程是:
- 解释器检查逻辑和语法错误
- 没有发现错误后,将格式化后的代码转换为字节码
- 字节码被发送到 PVM(Python虚拟机),PVM 将代码转换为 CPU 执行操作的机器可读语言。
但是,CPython 不是实现Python的方法。其实还有很多其他的实现:
- IronPython(在 .NET 上运行的Python )
- Jython(在Java虚拟机上运行的Python )
- PyPy(带有 JIT 编译器的快速Python实现)
- Stackless Python (支持微线程的 CPython 分支)
- MicroPython(在微控制器上运行的Python )
PyPy是使用与其共同开发的RPython语言构建的。 RPython (Restricted Python ) 是Python语言的一个子集,它对Python语言进行了一些限制以使其运行得更快。使用它而不是CPython的主要原因是它的速度。具体来说,它的运行速度通常比 CPython 快 4.4 倍。 PyPy 实现Python 2.7.13 和 3.6.9。它支持所有核心语言,通过了Python 2.7 测试套件和大部分 3.6 测试套件(稍作修改)它支持大多数常用的Python标准库模块。这意味着在大多数情况下,您的Python代码无需任何修改即可运行。
PyPy 使用一种称为元跟踪的技术,它将解释器转换为跟踪 JIT(即时)编译器,这是一种在运行时执行涉及编译的代码的方式。它不仅运行速度更快,而且比Python具有更好的内存使用率。它还与一些可以在Python中使用的最常用的库高度兼容。
其中一些是:
- 类型
- django
- sqlalchemy
- 烧瓶
- 扭曲的
- 塔架
- divmod 的新消息
- pyglet
- 枕头
- lxml
- 数字货币
有这么多好处,它也必然会有一些负面影响。
PyPy 的缺点
PyPy 无法执行所有Python代码。要执行的Python代码可能需要进行一些修改。外部 C-API 已在 PyPy 中重新实现,但有时一些 C 抽象在 CPython 上泄漏并被滥用,甚至可能是在不知不觉中。由于加载和编译字节码所花费的时间,它需要一个“预热”时间,这会在应用程序的初始执行中导致轻微到明显的延迟。执行越小,性能越差。