测量函数在Python中运行和完成所需的时间

时间:2014-08-17 16:14:20

标签: python python-3.x

在Python 3.4.1中,我试图测量一个函数运行和完成然后记录它所需的时间。我现在这样做是这样的:

starttime = time.clock()
asyncio.wait_for((method()), 5)
endtime = time.clock()
print(endtime - starttime)

这通常导致Python在6.29989986222767E-06(或0.00000629989986222767E)附近吐出一些东西。然后我用time.sleep尝试了它:

starttime = time.clock()
asyncio.wait_for((time.sleep(3)), 5)
endtime = time.clock()
print(endtime - starttime)

这又导致了6.87261802845284E-06,尽管(至少我认为)它应该需要3秒钟。我尝试使用线程,结果相同。你怎么看?如何衡量函数运行和完成所需的时间?

3 个答案:

答案 0 :(得分:2)

我通常使用这个装饰器为我的功能计时:

import time                                                
def timeit(method):
    def timed(*args, **kw):
        ts = time.time()
        result = method(*args, **kw)
        te = time.time()
        print '%r (%r, %r) %2.2f sec' % \
              (method.__name__, args, kw, te-ts)
        return result

    return timed

@timeit
def timeme():
    time.sleep(3)

time.time()提供的基准测试时间比time.clock()更准确,主要是因为time.clock()测量CPU时间。 time.time()将返回自纪元以来经过的秒数(即墙上时间),这正是您所需要的。

或者您也可以使用timeit https://docs.python.org/3/library/timeit.html

答案 1 :(得分:1)

为了快速进行性能分析,我使用以下两行(加上导入):

import time
import numpy as np

t = time.time()
# ...
print np.round_(time.time() - t, 3), 'sec elapsed'

它简短,简单而且我通常都需要。

(在大多数情况下,我还是导入了numpy。所以这对我没有任何开销。)

答案 2 :(得分:0)

我承认我对Python的asyncio并不是很熟悉,但我认为问题不在于你的时间,而在于你asyncio的使用。

我认为你只是用method()的价值创造一个未来,然而这就是你正在计划的时间:实际创造这个承诺。

您没有计划对未来价值的实际评估。这就是为什么计时睡眠(3)和方法()花费的时间大致相同。

如果可以的话,我建议您尝试使用asyncio.wait_for((method()), 5)或仅yield from asyncio.wait_for((method()), 3)更改timing method()