Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基准Python程序_Python_Python 3.x - Fatal编程技术网

基准Python程序

基准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" 我试了好几次。结果总是一样的。那么,

我是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"

我试了好几次。结果总是一样的。那么,我说的没有现金干扰,基准测试非常可靠,这是对的吗?

像这样做基准测试是可以的,对于运行“长”且非常恒定的函数,准确度足够好,就像在您的示例中一样。 但也有一些陷阱:对于“快速”函数(如空函数),您会遇到精度限制。对于执行时间不同的函数(例如净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,就不会影响基准测试