1

我使用这个 python 脚本:

python2.6和2.7

for i in xrange(1000000):print i

python3.3

for i in range(1000000):print(i)

结果:

蟒蛇2.7

real    1m15.973s
user    0m3.392s
sys 0m6.384s

蟒蛇2.6

real    1m15.860s
user    0m3.064s
sys 0m6.296s

使用 python 3.3,我多次测试脚本,我收到了 running 的差异。

蟒蛇3.3

real    1m34.235s
user    0m10.668s
sys 0m8.988s

real    1m29.431s
user    0m10.304s
sys 0m9.512s

real    1m12.528s
user    0m10.568s
sys 0m9.004s

real    1m4.193s
user    0m9.688s
sys 0m8.812s

real    1m18.332s
user    0m9.728s
sys 0m9.132s

之后,我再次尝试python 2.6,我得到了这个:

real    0m45.003s
user    0m3.056s
sys 0m5.956s

对 2 python 脚本 3.3 和 2.7(或 2.6)进行基准测试的最佳方法是什么。

4

3 回答 3

7

使用该timeit模块比较小的 Python 片段。它避免了常见的陷阱,使时序值具有可比性。

但是,您主要将写入速度计时到sys.stdout计时print i(在 Python 3 中,编码到终端编解码器)。

于 2013-08-09T11:37:28.517 回答
1

有几种方法可以对 Python 程序进行基准测试。至少,我可以用两种严肃的方式来。您可以在此处找到我在这些幻灯片中所说内容的扩展版本。您还可以从 PyCon 2013(来自 Amjith Ramanujam)关于 Python 分析的讨论中受益于该视频。

cProfile 模块

cProfile模块让您深入了解程序的每个过程所花费的时间。它可以以非常有效和精确的方式进行操作。但是,它的缺点是您不能相信它为每个过程提供的执行时间,而是它与其他过程相比所花费的相对时间。

使用 cProfile 就像这样简单地完成:

python -m cProfile ./mypythonprogram.py

如果您知道gprof,它将为您提供类似的输出,但适用于 Python 程序。

timeit模块

timeit模块旨在真正评估程序总共花费的时间。相反cProfile,每个过程都没有额外的检测,因此在执行过程中没有减速。

def foo ():
    for i in range (10):
        i = i * i

from timeit import Timer
max_iter = 10000
t = Timer ("foo()", "from __main__ import foo")
print ("foo(%i): %f seconds" %(max_iter, t.timeit(max_iter)))

而且,您在命令行中这样称呼它:

$> python2.7 timeit_example.py
foo(10000): 0.012774 seconds
$> python3.2 timeit_example.py
foo(10000): 0.014030 seconds
于 2013-08-09T11:59:35.187 回答
1

不要用“打印”测试,使用别的东西。

于 2013-08-09T11:56:07.500 回答