基准Python程序

时间:2012-09-27 07:25:55

标签: python python-3.x

我是Python的新手。这是我的第一个解释语言。到目前为止,我曾经学过Java。 因此,当Java程序第一次运行时,它比下一次运行速度慢。 reasi是缓存。

import time

def procedure():
    time.sleep(2.5)

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

我试了好几次。结果总是相等的。所以,我是对的,没有cashe干扰,基准测试非常可靠吗?

1 个答案:

答案 0 :(得分:5)

可以做这样的基准测试,对于运行“长”且相当恒定的函数,精度足够好,就像在你的例子中一样。 但是存在一些缺陷:对于“快速”功能(如空的功能),您会遇到精度限制。对于执行时间不同的函数(例如net i / o),您必须多次测量才能找到min / max / avg运行时。 除此之外,最佳使用的时钟在平台上有所不同:在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,这就不会影响您的基准。