Измерение прошедшего времени с помощью модуля времени



с модулем времени в python можно ли измерить прошедшее время? Если да, то как мне это сделать?



Мне нужно сделать это так, что если курсор был в виджете в течение определенного периода происходит событие.

538   6  

6 ответов:

start_time = time.time()
# your code
elapsed_time = time.time() - start_time

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

import time
from functools import wraps

PROF_DATA = {}

def profile(fn):
    @wraps(fn)
    def with_profiling(*args, **kwargs):
        start_time = time.time()

        ret = fn(*args, **kwargs)

        elapsed_time = time.time() - start_time

        if fn.__name__ not in PROF_DATA:
            PROF_DATA[fn.__name__] = [0, []]
        PROF_DATA[fn.__name__][0] += 1
        PROF_DATA[fn.__name__][1].append(elapsed_time)

        return ret

    return with_profiling

def print_prof_data():
    for fname, data in PROF_DATA.items():
        max_time = max(data[1])
        avg_time = sum(data[1]) / len(data[1])
        print "Function %s called %d times. " % (fname, data[0]),
        print 'Execution time max: %.3f, average: %.3f' % (max_time, avg_time)

def clear_prof_data():
    global PROF_DATA
    PROF_DATA = {}

использование:

@profile
def your_function(...):
    ...

можно профилировать более одной функции одновременно. Затем для печати измерений просто вызовите print_prof_data ():

time.time() сделает работу.

import time

start = time.time()
# run your code
end = time.time()

elapsed = end - start

Вы можете посмотреть этой вопрос, но я не думаю, что это будет необходимо.

для пользователей, которые хотят лучше форматирование,

import time
start_time = time.time()
# your script
elapsed_time = time.time() - start_time
time.strftime("%H:%M:%S", time.gmtime(elapsed_time))

распечатает, в течение 2 секунд:

'00:00:02'

и в течение 7 минут одну секунду:

'00:07:01'

обратите внимание, что минимальная единица времени с gmtime-секунды. Если вам нужны микросекунды рассмотрим следующее:

import datetime
start = datetime.datetime.now()
# some code
end = datetime.datetime.now()
elapsed = end - start
print(elapsed)
# or
print(elapsed.seconds,":",elapsed.microseconds) 

strftime документация

для лучшего измерения прошедшего времени (начиная с Python 3.3), используйте time.perf_counter().

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

для измерения на заказ часов/дней, вы не заботитесь о суб-вторую резолюцию, чтобы использовать time.monotonic().

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

во многих реализациях это может быть то же самое.

до 3.3, вы застряли с time.clock().

в Unix возвращает текущее время процессора в виде числа с плавающей запятой, выраженного в секундах. Точность, а на самом деле и само определение значения "процессорного времени", зависит от функции C с тем же именем.

В Windows эта функция возвращает настенные часы секунды, прошедшие с момента первого вызова этой функции в виде числа с плавающей запятой на основе функции Win32 QueryPerformanceCounter (). Разрешение, как правило, лучше, чем одна микросекунда.


обновление для Python 3.7

новое в Python 3.7 составляет PEP 564 -- добавить новые функции времени с разрешением наносекунды.

использование этих может дополнительно устранить ошибки округления и с плавающей запятой, особенно если вы измеряете очень короткие периоды, или ваше приложение (или машина Windows) работает долго.

разрешение начинает ломаться на perf_counter() примерно через 100 дней. Так, например, после года безотказной работы самый короткий интервал (больше 0), который он может измерить, будет больше, чем при его запуске.

вам нужно импортировать время, а затем использовать время.метод time () для определения текущего времени.

import time

start_time=time.time() #taking current time as starting time

#here your code

elapsed_time=time.time()-start_time #again taking current time - starting time 

на более длительный срок.

import time
start_time = time.time()
...
e = int(time.time() - start_time)
print('{:02d}:{:02d}:{:02d}'.format(e // 3600, (e % 3600 // 60), e % 60))

печати

00:03:15

если более 24 часов

25:33:57

, который вдохновил ответ Рутгер Hofste по. Спасибо, Рутгер!

Comments

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