协慌网

登录 贡献 社区

如果 PyPy 快 6.3 倍,为什么我不应该在 CPython 上使用 PyPy?

我已经听到很多有关PyPy项目的信息。他们声称它比其站点上的 CPython解释器快 6.3 倍。

每当我们谈论诸如 Python 之类的动态语言时,速度都是头等大事。为了解决这个问题,他们说 PyPy 快 6.3 倍。

第二个问题是并行性,臭名昭著的Global Interpreter Lock (GIL)。为此,PyPy 表示可以提供无 GIL 的 Python

如果 PyPy 可以解决这些巨大的挑战,那么它的哪些弱点在阻止更广泛的采用呢?也就是说,是什么阻止了像我这样的人(一个典型的 Python 开发人员)现在立即切换到 PyPy?

答案

注意: PyPy 现在比 2013 年问这个问题时更加成熟,并且得到了更好的支持。避免从过时的信息中得出结论。


  1. 正如其他人很快提到的那样,PyPy 对 C 扩展的支持很弱。它具有支持,但是通常速度低于 Python,并且充其量只是一时的困难。因此,许多模块仅需要 CPython。 PyPy 不支持 numpy 。某些扩展仍不受支持( PandasSciPy等),请在进行更改之前先查看支持的软件包的列表。请注意,现在支持列表中标记为不支持的许多软件包。
  2. 目前,对 Python 3 的支持尚处于试验阶段。刚刚达到稳定!自 2014 年 6 月 20 日起, PyPy3 2.3.1-Fulcrum 退出了
  3. 对于很多人使用 Python 的 “脚本” 来说,PyPy 有时实际上并不快。这些是运行时间短的程序,可做一些简单而又小的事情。由于 PyPy 是 JIT 编译器,因此其主要优点来自运行时间长和简单的类型(例如数字)。与 CPython 相比,PyPy 的 JIT 之前速度可能会很差。
  4. 惯性。迁移到 PyPy 通常需要重新配置,这对于某些人和组织来说简直是太多的工作。

我会说,这些是影响我的主要原因。

该网站主张 PyPy 比 CPython 的快 6.3 倍。报价:

所有基准的几何平均值比 CPython 快 0.16 或 6.3 倍

与您所做的一揽子声明完全不同,当您了解差异时,您将至少了解一组不能仅仅说 “使用 PyPy” 的原因。听起来好像我很挑剔,但是了解为什么这两个陈述完全不同是至关重要的。

分解:

  • 他们所做的陈述仅适用于他们所使用的基准。它完全没有说明您的程序(除非您的程序与其基准之一完全相同)。

  • 该声明大约是一组基准的平均值。没有人声称运行 PyPy 甚至可以为他们测试过的程序带来 6.3 倍的改进。

  • 没有人声称 PyPy 甚至可以运行 CPython 运行的所有程序,更不用说更快了。

由于 pypy 并非 100%兼容,因此需要 8 gig 的 ram 进行编译,是一个不断变化的目标,并且高度试验性,而 cpython 是稳定的,这是模块构建者默认的目标,已有 20 年了(包括对 pypy 不起作用的 c 扩展名) ),并且已经广泛部署。

Pypy 可能永远不会成为参考实现,但它是一个很好的工具。