基准Python程序
我是Python新手。这是我的第一种口译语言。到目前为止,我一直在学习Java。 所以,当Java程序第一次运行时,它的执行速度比下一次慢。 原因是缓存基准Python程序,python,python-3.x,Python,Python 3.x,我是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" 我试了好几次。结果总是一样的。那么,
import time
def procedure():
time.sleep(2.5)
# measure process time
t0 = time.clock()
procedure()
print (time.clock() - t0), "seconds process time"
我试了好几次。结果总是一样的。那么,我说的没有现金干扰,基准测试非常可靠,这是对的吗?像这样做基准测试是可以的,对于运行“长”且非常恒定的函数,准确度足够好,就像在您的示例中一样。 但也有一些陷阱:对于“快速”函数(如空函数),您会遇到精度限制。对于执行时间不同的函数(例如净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
s,就不会影响基准测试