测试Python程序

2024-10-03 09:15:30 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我试了好几次。结果总是相等的。那么,没有现金干扰,基准相当可靠,我说的对吗?在


Tags: import程序语言timedefsleepjavaprocess
1条回答
网友
1楼 · 发布于 2024-10-03 09:15:30

做这样的基准测试是可以的,对于运行“长”且非常恒定的函数来说,准确度已经足够了,比如在您的例子中。 但也有一些陷阱:对于“快速”函数(如空函数),您会遇到精度限制。对于执行时间不同的函数(例如neti/o),您必须测量多次才能找到min/max/avg runtime。 除此之外,windows平台上使用的时钟也不同,时间时钟()是首选,不可能,时间。时间(). 在

幸运的是,有一个模块可以处理所有这些问题: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代码在第一次使用时编译为字节码。默认情况下,这个字节码是缓存的-但只要您不在函数中执行imports操作,就不会影响您的基准测试。在

相关问题 更多 >