python -> 计时while循环运行时间

7 投票
3 回答
10196 浏览
提问于 2025-04-16 10:09

我有一个循环,可能会运行几个小时。请问我怎么能让它在设定的时间间隔内告诉我已经运行了多久呢?

这只是一个普通的问题。

补充说明:这是一个执行排列的循环,所以我能不能让它每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)

撰写回答