📜  为什么 PyPy3 比 Python3 更受欢迎?

📅  最后修改于: 2022-05-13 01:54:35.361000             🧑  作者: Mango

为什么 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中代码的执行流程是:

  1. 解释器检查逻辑和语法错误
  2. 没有发现错误后,将格式化后的代码转换为字节码
  3. 字节码被发送到 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 上泄漏并被滥用,甚至可能是在不知不觉中。由于加载和编译字节码所花费的时间,它需要一个“预热”时间,这会在应用程序的初始执行中导致轻微到明显的延迟。执行越小,性能越差。