Python -> время цикла пока работает - PullRequest
6 голосов
/ 18 января 2011

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

просто общий вопрос ... вопрос

РЕДАКТИРОВАТЬ: это цикл while, который выполняет перестановки, так что я могу иметьвремя печати каждые 10 секунд?

Ответы [ 3 ]

8 голосов
/ 18 января 2011

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...