【发布时间】:2011-02-09 20:23:09
【问题描述】:
我看到 Windows 上的 time.clock() 在第一次调用时会“启动”一个计时器,并返回自第一次调用之后经过的时间。我读到重新启动时钟的唯一方法是启动一个新进程。
启动和终止线程是否也应该重新启动 time.clock()?它现在似乎不起作用。如果不是,是否是重新启动整个可执行文件的唯一解决方案?
【问题讨论】:
我看到 Windows 上的 time.clock() 在第一次调用时会“启动”一个计时器,并返回自第一次调用之后经过的时间。我读到重新启动时钟的唯一方法是启动一个新进程。
启动和终止线程是否也应该重新启动 time.clock()?它现在似乎不起作用。如果不是,是否是重新启动整个可执行文件的唯一解决方案?
【问题讨论】:
线程不是进程,所以,不是。 (作为一个小问题,你不能在 Python 中杀死一个线程,你只能要求它退出。通过其他方式杀死线程,即使存在这种方式,也可能会使 Python 处于不良状态。)
问题是为什么你要重置计时器,以及你为什么要使用time.clock()。如果您关心两点之间的间隔时间太高以至于time.time() 不合适,您只需从第二点中减去第一点。无需重置。我建议只使用time.time(),除非您真的关心粒度上的细微差别,因为time.time() 在所有平台上的工作方式都相同,而time.clock() 则相反。
【讨论】:
如果你想要一个时钟,你可以将线程分开,你可以用time.clock() 的精度进行重置,这比time.time() 的精度高,因为第二个的浮点数更大(几乎无法察觉的差异),用于测量运行一些代码时过去的时间流逝你可以试试这个:
t0 = time.clock()
... do something
print('Running time:', time.clock()-t0)
你也可以试试这个函数装饰:
def duration(code):
def f(*args):
t0 = time.clock()
bar = code(*args)
print('Running time:', time.clock()-t0)
return bar
return f
在此之后,您可以使用装饰器定义您的函数:
@duration
def myFun(*args):
... do something
或者只是用装饰器调用函数:
duration(myFun)(*args)
【讨论】: