我使用 PyPy 错了吗?它比标准 Python 慢 10 倍

Am I using PyPy wrong? It's slower 10x than standard Python

我听说过有关 PyPy 的好消息。特别是我听说它非常快,这让我想知道它是否可用于我拥有的嵌入式项目。

我为我的 Windows 7 PC 下载了 PyPy-2.6,并将内容解压缩到一个目录中。

我编写了一个小测试程序来进行基准测试:


import time

def fib(n):
        if n == 0 or n == 1:
                return 1
        return fib(n - 1) + fib(n - 2)

t0 = time.time()
fib(20)
t1 = time.time()

print t1-t0

所以我去了PyPy解压的目录,运行 ./pypy.exe hello.py得到了0.120的答案。

然后我启动了一个 cygwin 控制台和 运行 python hello.py 并得到了 0.01 的答案。

我是不是用错了 PyPy 或者它只是对某些应用程序更快?

编辑

感谢 Rob 指出 JIT 编译器需要时间预热。

扩展我的示例代码会产生以下结果:

n     PyPy    Python
20    0.12     0.01
25    0.15     0.06
30    0.34     0.67
35    0.92     7.39
40    10.98    82.9

好像有0.1秒的启动成本什么的,但是之后就快了。

它只对某些应用程序更快。引用 PyPy doc:

There are two cases that you should be aware where PyPy will not be able to speed up your code:

  • Short-running processes: if it doesn't run for at least a few seconds, then the JIT compiler won't have enough time to warm up.

  • If all the time is spent in run-time libraries (i.e. in C functions), and not actually running Python code, the JIT compiler will not help.

由于您的程序似乎 运行 大约为 10-2 或 10-1 秒,JIT 编译器对你没有任何好处。