我听说了很多关于PyPy项目的事情。他们声称它比他们网站上的CPython解释器快6.3倍。
每当我们谈论像Python这样的动态语言时,速度是首要问题之一。为了解决这个问题,他们说PyPy要快6.3倍。
第二个问题是并行性,即臭名昭著的全局解释器锁(GIL)。为此,PyPy说它可以提供无gil的Python。
如果PyPy可以解决这些巨大的挑战,那么它的弱点是什么?也就是说,是什么阻止了像我这样的典型的Python开发人员现在转向PyPy ?
我听说了很多关于PyPy项目的事情。他们声称它比他们网站上的CPython解释器快6.3倍。
每当我们谈论像Python这样的动态语言时,速度是首要问题之一。为了解决这个问题,他们说PyPy要快6.3倍。
第二个问题是并行性,即臭名昭著的全局解释器锁(GIL)。为此,PyPy说它可以提供无gil的Python。
如果PyPy可以解决这些巨大的挑战,那么它的弱点是什么?也就是说,是什么阻止了像我这样的典型的Python开发人员现在转向PyPy ?
当前回答
第二个问题比较容易回答:如果所有代码都是纯Python,那么基本上可以使用PyPy作为替代。然而,许多广泛使用的库(包括一些标准库)是用C编写的,并编译为Python扩展。其中一些可以与PyPy一起工作,一些不能。PyPy提供了与Python相同的“面向”工具——也就是说,它是Python——但其内部结构不同,因此与这些内部结构交互的工具将无法工作。
至于第一个问题,我想这有点像第一个问题:PyPy一直在快速发展,以提高速度并增强与其他代码的互操作性。这使得它更像是实验性的,而不是官方的。
我认为,如果PyPy进入稳定状态,它可能会开始得到更广泛的应用。我还认为对Python来说,摆脱C语言的基础是一件很棒的事情。但这在一段时间内不会发生。PyPy还没有达到临界质量,它本身几乎足够有用,可以做你想做的所有事情,这将激励人们填补空白。
其他回答
该网站并没有声称PyPy比CPython快6.3倍。引用:
所有基准测试的几何平均值比CPython快0.16或6.3倍
这是一个与您所做的概括性陈述非常不同的陈述,当您理解其中的区别时,您将至少理解为什么不能只说“使用PyPy”的一组原因。这听起来像是我在挑刺,但理解为什么这两种说法完全不同是至关重要的。
具体来说:
他们的陈述只适用于他们使用过的基准测试。它完全没有说明您的程序(除非您的程序与他们的一个基准测试完全相同)。 这个陈述是关于一组基准的平均值。即使是他们测试过的程序,也没有人声称运行PyPy会带来6.3倍的改进。 没有人声称PyPy能运行CPython运行的所有程序,更不用说更快了。
CPython有引用计数和垃圾收集,PyPy只有垃圾收集。
因此,对象倾向于更早地删除,并且在CPython中以更可预测的方式调用__del__。有些软件依赖于这种行为,因此它们还没有准备好迁移到PyPy。
其他一些软件可以同时使用这两种方法,但使用CPython时使用的内存更少,因为未使用的对象会更早释放。(我没有任何测量方法来表明这有多重要,以及其他哪些实现细节会影响内存使用。)
支持的Python版本
引用Python的禅意:
可读性。
例如,Python 3.8引入了fstring =。
Python 3.8+中可能有其他对您更重要的特性。PyPy目前不支持Python 3.8+。
无耻的自我广告:Python版本的杀手特性-如果你想知道更多你使用旧Python版本时错过的东西
对于许多项目,不同的python之间在速度方面实际上是0%的差异。这是由工程时间主导的,所有的python都有相同数量的库支持。
注意:与2013年提出这个问题时相比,现在的PyPy更成熟,支持也更好。避免从过时的信息中得出结论。
PyPy, as others have been quick to mention, has tenuous support for C extensions. It has support, but typically at slower-than-Python speeds and it's iffy at best. Hence a lot of modules simply require CPython. PyPy doesn't support numpy. Some extensions are still not supported (Pandas, SciPy, etc.), take a look at the list of supported packages before making the change. Note that many packages marked unsupported on the list are now supported. Python 3 support is experimental at the moment. has just reached stable! As of 20th June 2014, PyPy3 2.3.1 - Fulcrum is out! PyPy sometimes isn't actually faster for "scripts", which a lot of people use Python for. These are the short-running programs that do something simple and small. Because PyPy is a JIT compiler its main advantages come from long run times and simple types (such as numbers). PyPy's pre-JIT speeds can be bad compared to CPython. Inertia. Moving to PyPy often requires retooling, which for some people and organizations is simply too much work.
我想说,这些是影响我的主要原因。