python -> 计时while循环运行时间
我有一个循环,可能会运行几个小时。请问我怎么能让它在设定的时间间隔内告诉我已经运行了多久呢?
这只是一个普通的问题。
补充说明:这是一个执行排列的循环,所以我能不能让它每10秒打印一次运行时间呢?
3 个回答
1
有一种比较“黑科技”的方法可以做到这一点,就是使用time.asctime()。你可以在进入循环之前先记录下当前的时间,然后在循环的某个地方再记录一次。接着,计算这两个时间之间的差值,如果这个差值是10秒,就更新记录的时间为当前时间,并打印出程序已经运行了。
不过,这种方法实在是太麻烦了,因为需要做一些复杂又无聊的数学计算。
如果你想要检查某个特定算法的运行时间,使用timeit
模块会更好。
希望这对你有帮助!
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
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)