Python -> 计算 while 循环已运行的时间

7

我有一个循环,每次运行时间长达数小时。如何让它在设定的间隔告诉我已经运行了多久?

只是一个普通的问题...

编辑:这是一个运行排列组合的 while 循环,所以我能否让它每 10 秒打印一次运行时间?

3个回答

9

不必在每个循环中检查时间,可以使用计时器对象

import time
from threading import Timer

def timeout_handler(timeout=10):
    print time.time()
    timer = Timer(timeout, timeout_handler)
    timer.start()

timeout_handler()
while True:
    print "loop"
    time.sleep(1)

1
+1 比我的答案好多了,喜欢 Python 自带这么多实用的工具。 - fmark

2

正如所述,这是一种有点恶心的hack,因为它涉及在每次迭代中检查时间。 为了使其工作,您需要运行占用超时时间小部分的任务-如果您的循环每分钟只迭代一次,则不会每十秒打印一次。 如果您想被打断,可以考虑使用多线程,或者更好的选择是在linux/mac/unix上使用信号。 您的平台是什么?

import time

timeout = 10
first_time = time.time()
last_time = first_time
while(True):
    pass #do something here
    new_time = time.time()
    if  new_time - last_time > timeout:
        last_time = new_time
        print "Its been %f seconds" % (new_time - first_time)

输出:

Its been 10.016000 seconds
Its been 20.031000 seconds
Its been 30.047000 seconds

哦天啊,我爱你,但是 pass 是什么意思?我需要在它的位置上放置一些东西吗? - tekknolagi
1
pass 是空操作,它只是一个占位符,什么也不做(真的)。请用您自己的代码替换它。 - fmark
1
哦,我不知道Timer对象,我建议你在下面的答案中切换使用它。 - fmark

1

有一种非常hacky的方法可以使用time.asctime()来实现。在进入while循环之前和循环本身的某个地方存储asctime。计算存储时间和当前时间之间的时间差,如果差值为10秒,则将存储时间更新为当前时间并打印它已经运行。

然而,这是一种非常hacky的方法,因为它需要一些扭曲和乏味的数学。

如果您的目的是检查特定算法的运行时间,则最好使用timeit模块。

希望这可以帮助到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接