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

Jam*_*mes 3 python pypy

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

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

我写了一个小测试程序,允许我进行基准测试:


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秒的启动成本或其他东西,但之后它会更快.

Rob*_*obᵩ 5

它对某些应用程序来说速度更快.引用PyPy文档:

有两种情况你应该知道PyPy无法加速你的代码:

  • 短时间运行的进程:如果它没有运行至少几秒钟,那么JIT编译器将没有足够的时间进行预热.

  • 如果所有时间都花在运行时库(即在C函数中),而不是实际运行Python代码,那么JIT编译器将无济于事.

由于您的程序似乎以10 - 2或10 - 1秒的顺序运行,因此JIT编译器对您没有任何帮助.