在Python3.4.1中,我试图测量函数运行和完成所需的时间,然后记录它。我现在是这样做的
starttime = time.clock()
asyncio.wait_for((method()), 5)
endtime = time.clock()
print(endtime - starttime)这通常导致Python吐出大约6.29989986222767E-06 (或0.0000062929989986222767E)的东西。然后我用time.sleep试了一下:
starttime = time.clock()
asyncio.wait_for((time.sleep(3)), 5)
endtime = time.clock()
print(endtime - starttime)这再次导致6.87261802845284E-06,尽管(至少我认为)应该需要3秒。我已经尝试过使用线程,结果是一样的。你认为如何?如何衡量一个函数运行和完成所需的时间?
发布于 2014-08-17 16:31:49
我通常使用这个装饰器来计时我的功能:
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。
发布于 2014-08-17 16:44:52
为了进行快速性能分析,我使用了以下两行(加上导入):
import time
import numpy as np
t = time.time()
# ...
print np.round_(time.time() - t, 3), 'sec elapsed'它很短,很简单,也是我通常需要的。
(在大多数情况下,我还是导入了numpy。因此,这对我来说没有开销。)
发布于 2014-08-18 01:41:08
我承认我不太熟悉Python的异步,但我相信问题不在于您的时间,而在于您对asyncio的使用。
我认为您只是在创建一个具有方法()价值的未来,然而,这就是您所要做的一切:实际创建这个承诺。
您没有对未来价值的实际评估进行计时。这就是为什么定时睡眠(3)和method()所花费的时间大致相同。
我建议尝试用yield from asyncio.wait_for((method()), 3)来改变yield from asyncio.wait_for((method()), 3),如果可以的话只修改timing method()。
https://stackoverflow.com/questions/25351083
复制相似问题