我有一个循环,每次运行时间长达数小时。如何让它在设定的间隔告诉我已经运行了多久?
只是一个普通的问题...
编辑:这是一个运行排列组合的 while 循环,所以我能否让它每 10 秒打印一次运行时间?
我有一个循环,每次运行时间长达数小时。如何让它在设定的间隔告诉我已经运行了多久?
只是一个普通的问题...
编辑:这是一个运行排列组合的 while 循环,所以我能否让它每 10 秒打印一次运行时间?
不必在每个循环中检查时间,可以使用计时器对象
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)
正如所述,这是一种有点恶心的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
是什么意思?我需要在它的位置上放置一些东西吗? - tekknolagiTimer
对象,我建议你在下面的答案中切换使用它。 - fmark有一种非常hacky的方法可以使用time.asctime()来实现。在进入while循环之前和循环本身的某个地方存储asctime。计算存储时间和当前时间之间的时间差,如果差值为10秒,则将存储时间更新为当前时间并打印它已经运行。
然而,这是一种非常hacky的方法,因为它需要一些扭曲和乏味的数学。
如果您的目的是检查特定算法的运行时间,则最好使用timeit
模块。
希望这可以帮助到您。