python - > время выполнения цикла while



У меня есть цикл, который длится до нескольких часов за раз. как я могу заставить его сказать мне, как долго он был на заданном интервале?



Просто общий...Вопрос



EDIT: это цикл while, который выполняет перестановки, так что можно ли печатать время, которое выполняется каждые 10 секунд?

701   3  

3 ответов:

Вместо проверки времени на каждом цикле можно использовать объект 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)

Как уже отмечалось, это немного неприятный Хак, поскольку он включает в себя проверку времени каждой итерации. Чтобы он работал, вам нужно иметь задачи, которые выполняются в течение небольшого процента времени ожидания - если цикл повторяется только каждую минуту, он не будет распечатываться каждые десять секунд. Если вы хотите, чтобы вас прервали, вы можете рассмотреть многопоточность, или предпочтительно, если вы находитесь на 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

Есть очень хитрый способ сделать это, используя время.asctime (). Вы сохраняете asctime перед входом в цикл while и где-то в самом цикле. Вычислите разницу во времени между сохраненным временем и текущим временем, и если эта разница составляет 10 секунд, то обновите сохраненное время до текущего времени и распечатайте, что оно было запущено.

Тем не менее, это очень банальный способ сделать это, так как он требует некоторой запутанной и скучной математики.

Если ваша цель-проверить время выполнения конкретный алгоритм, тогда вам лучше использовать модуль timeit

Надеюсь, это поможет

Comments

    Ничего не найдено.