使用time.time()计时函数常返回0秒

2 投票
2 回答
6426 浏览
提问于 2025-04-17 23:46

我需要给我在课堂上做的一个算法实现计时,所以我使用了time.time()这个函数。实现之后,我还得在一些数据文件上运行这个算法,这些文件里有小数据集和大数据集,我想正式分析一下算法的复杂度。

不过,奇怪的是,在小数据集上,我的运行时间显示为0秒。即使我用这个函数查看大数据集的运行时间时,精度可以达到0.000000000000000001,我还是不敢相信在小数据集上运行时间真的会少于这个。

我想问的是:使用这个函数会有问题吗?如果有的话,有没有其他更精确的函数可以用?还是说我做错了什么?

如果你需要我的代码,这里在下面:

import sys, time
import random

from utility import parseSystemArguments, printResults

...

def main(ville):
    start = time.time()

    solution = dynamique(ville) # Algorithm implementation

    end = time.time()

    return (end - start, solution)

if __name__ == "__main__":
    sys.argv.insert(1, "-a")
    sys.argv.insert(2, "3")

    (algoNumber, ville, printList) = parseSystemArguments()

    (algoTime, solution) = main(ville)

    printResults(algoTime, solution, printList)

这是printResults函数:

def printResults(time, solution, printList=True):
    print ("Temps d'execution = " + str(time) + "s")
    if printList:
        print (solution)

2 个回答

4

不要把系统时间的精度和浮点数的精度搞混。电脑上的时间精度取决于系统时钟更新的频率。这个更新频率在不同的机器上是不同的,所以如果你想看到时间的变化,确保你的代码执行时间至少要有一毫秒或更长。你可以试着把代码放进一个循环里,像这样:

start = time.time()

k = 100000
for i in range(k)
    solution = dynamique(ville)

end = time.time()

return ((end - start)/k, solution)

最后,你需要把总时间除以循环的次数,这样才能知道你的代码实际运行了一次需要多长时间。如果你想要更准确的执行时间,可能需要增加循环次数k,或者如果你的电脑在循环里运行很长时间,可能需要减少k。

5

我解决问题的方法是使用timeit模块,而不是time模块。

import timeit

...

def main(ville):
    start = timeit.default_timer()

    solution = dynamique(ville)

    end = timeit.default_timer()

    return (end - start, solution)

撰写回答