基准测试Python程序

3

我是Python的新手,这是我接触的第一种解释性语言。到目前为止,我一直在学习Java。 因此,当Java程序首次运行时,它比后续运行时执行速度慢。 原因是缓存。

import time

def procedure():
    time.sleep(2.5)

# measure process time
t0 = time.clock()
procedure()
print (time.clock() - t0), "seconds process time"

我已经尝试了数次。结果总是相同的。那么,我是否可以认为没有缓存干扰,而且基准测试非常可靠?

1个回答

5

做这样的基准测试是可以的,对于运行“长时间”且相当稳定的函数(例如您的示例),准确性已经足够好了。

但是有一些陷阱:对于“快速”函数(如空函数),您会遇到精度限制。对于执行时间变化的函数(例如网络 I/O),您必须多次测量以找到最小/最大/平均运行时间。

除此之外,在不同平台上最好使用的时钟不同:在 Windows 上,推荐使用 time.clock(),在 *nix 上,推荐使用 time.time()。

幸运的是,有一个模块可以处理所有这些问题:timeit

>>> import time
>>> def procedure():
    pass

>>> def time_this(f):
    t0=time.clock()
    f()
    print((time.clock() - t0), "seconds process time")


>>> time_this(procedure)
1.9555558310457855e-06 seconds process time
>>> time_this(procedure)
1.9555557742023666e-06 seconds process time
>>> time_this(procedure)
1.9555557742023666e-06 seconds process time
>>> import timeit
>>> timeit.Timer(procedure).timeit()
0.09460783423588737
>>> timeit.Timer(procedure).repeat()
[0.09791419021132697, 0.09721947901198291, 0.09598943441130814]

你可能想查看它的源代码。或者直接使用它 ;)
至于缓存:Python代码在首次使用时编译为字节码。默认情况下,这个字节码会被缓存 - 但只要你不在函数中使用 import,它就不会影响你的基准测试结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接