我有一个循环,一次运行几个小时。我怎么能告诉我它在设定的时间间隔内有多长时间?
只是一个通用的......问题
编辑:这是一个运行排列的while循环,所以我可以打印每10秒运行一次的时间吗?
答案 0 :(得分:8)
您可以使用Timer对象
,而不是检查每个循环的时间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 :(得分:2)
如上所述,这是一个讨厌的黑客,因为它涉及检查每次迭代的时间。为了使它工作,你需要运行一小部分超时的任务 - 如果你的循环只是每分钟迭代一次,它就不会每十秒打印一次。如果你想被打断,你可能会考虑多线程,或者最好是你在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
答案 2 :(得分:1)
使用time.asctime()有一种非常黑客的方法。在进入while循环之前以及循环本身的某个位置存储asctime。计算存储时间与当前时间之间的时间差,如果差值为10秒,则将存储时间更新为当前时间并打印出已运行的时间。
然而,这是一种非常黑客的方式,因为它需要一些扭曲和无聊的数学。
如果您的目标是检查特定算法的运行时间,那么最好使用timeit
模块
希望这有助于