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