2017-01-17 8 views
0

У меня есть функция, которая петли, и я хочу измерить, сколько времени потребуется, чтобы пройти один оборот, включая время, которое я добавил с помощью tkinter. Я добавил эти строки в нижнюю часть моей функции циклирования.Как измерить fps (прошедшее время) с помощью tkinter python.after?

Я бы ожидал увидеть количество изменений времени, основанное на значении .after, но независимо от того, устанавливаю ли его 25 или 5025, я получаю одинаковые базовые результаты. Я также экспериментировал с размещением инструкции time2= в самом начале цикла, а затем также заменой позиций печати и time2=.

Я получаю несколько разные результаты с разными позициями, но ни один из них, похоже, не показывает добавленное время значения .after, хотя я могу отчетливо видеть (в зависимости от того, что делает остальная часть кода), что время добавляется.

Итак, у меня, очевидно, есть проблема «измерения». Есть ли критическая часть знаний, которую я не понимаю?

print time.clock() - time2[0]  
time2[0] = time.clock()  
root.after(5025, myloop) 
+1

вы измеряете время до выполнения 'after' и перед выполнением' myloop', поэтому вам нужно получить неправильный результат. Лучше показать минимальный рабочий пример, потому что этого кода недостаточно, чтобы ответить. – furas

+0

BTW с '5025' вы должны получить около $ 1000/5025' FPS (около 0.199 FPS), но вам нужно добавить время, используемое командой' myloop' - т.е. '1000/(5025 + time_in_myloop)' FPS – furas

+1

time.clock() устарел в Python 3.3 - вы должны использовать process_time() Однако, если вы пытаетесь захватить прошедшее событие событие прошедшего времени, вам может понадобиться дельта-время .time(), а time.clock() и process_time() измеряют время процессора, необходимое для выполнения строки python. –

ответ

2

Основываясь на ваш комментарий выше, вы можете достичь истекшее время функциональность, как так:

import time 

def get_elapsed_time() 
    startTime = time.time() 
    my_loop() 
    endTime = time.time() 

    elapsedTime = endTime - startTime 
    print elapsedTime 

time.time() представляет собой течение времени с момента Linux эпохи, что 1/1/1970 - подробнее здесь: https://en.wikipedia.org/wiki/Unix_time

Таким образом, данная функция будет установлена ​​startTime в «Linux Universal Time», цикл через my_loop() функции, в конце который он установит endTime в «Универсальное время Linux». Разница между endTime и startTime будет представлять собой промежуток времени между тем, когда была вызвана функция get_elapsed_time(), и когда она закончилась, и это закончится, а это будет через несколько секунд после завершения вашей функции my_loop(). Эффективно это будет печатать количество времени, в течение которого выполнялась ваша функция my_loop().

+0

Предполагается, что my_loop() - это функция, к которой вы обращаетесь, которая требует времени –

+0

. Итак, вы предлагаете использовать отдельную функцию для измерения? Я могу сказать, что попытка, хотя функция, которую я пытаюсь измерить, нуждается в цикле, и я хотел бы сохранить текущую оценку того, сколько времени занимает каждый цикл, чтобы оценить, какие элементы добавляют наибольшее время. Было бы трудно измерить разные вещи за один цикл за раз. Но мне действительно интересно, почему подход, который я взял, не работал в первую очередь. – chmedly

Смежные вопросы