Python time.clock() - 使用线程重置时钟值

2 投票
2 回答
10266 浏览
提问于 2025-04-15 21:47

我发现,在Windows上,第一次调用time.clock()时,它会“启动”一个计时器,之后的调用会返回从第一次调用到现在经过的时间。我看到的说法是,重启这个计时器的唯一方法就是启动一个新的进程。

那么,启动和结束线程是否也能重启time.clock()呢?现在似乎并没有正常工作。如果不能的话,唯一的解决办法就是重新启动整个程序吗?

2 个回答

0

如果你不想涉及线程,想要一个可以重置的时钟,使用 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)
4

线程和进程是两回事,所以,答案是否定的。(顺便提一下,在Python中你不能直接杀死一个线程,你只能请求它退出。通过其他方式杀死线程,如果有这种方式的话,可能会让Python处于一个不好的状态。)

问题在于你为什么想要重置计时器,以及你为什么使用time.clock()。如果你关心的是两个时间点之间的经过时间,并且这个时间的精确度高到time.time()不够用的程度,那你只需要用第二个时间点减去第一个时间点就可以了。根本不需要重置。我建议你直接使用time.time(),除非你真的很在意那一点点精度的差别,因为time.time()在所有平台上都表现得一样,而time.clock()就不一定了。

撰写回答