Как засечь время выполнения программы в python

У меня есть программа командной строки на Python, для завершения которой требуется некоторое время. Я хочу знать точное time , которое требуется для завершения работы. Я просмотрел модуль timeit , но, похоже, это только для небольших фрагментов кода. Я хочу time всю программу.

john2x 12 окт. 2009, в 23:54
Поделиться
Поделиться:

25 ответов

Лучший ответ
Самый простой способ в Python:

import time start_time = time.time() main() print(«— %s seconds —» % (time.time() — start_time))
Это предполагает, что для выполнения вашей программы требуется не менее десятой секунды. Печать
— 0.764891862869 seconds —
rogeriopvl 13 окт. 2009, в 00:31

Поделиться

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

newacct 13 окт. 2009, в 01:23

в Windows сделайте то же самое, но используйте time.clock () вместо time.time (). Вы получите немного лучшую точность.

Как замерять время выполнения кода в Python | timeit vs time

Corey Goldberg 13 окт. 2009, в 14:02
Ответ Павла лучше, см. Stackoverflow.com/questions/1557571/…
sorin 09 июнь 2010, в 14:32
Я должен был добавить: «время импорта», чтобы заставить это работать.

screechOwl 23 сен. 2012, в 18:14

Я рекомендую делать round(time.time() — start_time, 2) (или любое round(time.time() — start_time, 2) десятичное число, которое вы хотите), я получал научные цифры, такие как 1.24e-5.

ThorSummoner 06 фев. 2015, в 17:49
jfs 03 март 2015, в 08:41
jfs 03 март 2015, в 08:45
как вы рассчитываете / контролируете / конвертируете в часы, дни и т. д.?
Charlie Parker 23 июнь 2016, в 18:37
использовать модуль timeit
user5319825 27 авг. 2016, в 12:38

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

Gilad 09 нояб. 2016, в 15:53
Показать ещё 8 комментариев

Я помещаю этот модуль timing.py в свой собственный каталог site-packages и просто вставляю import timing в начало моего модуля:

import atexit from time import clock def secondsToStr(t): return «%d:%02d:%02d.%03d» % reduce(lambda ll,b : divmod(ll[0],b) + ll[1:], [(t*1000,),1000,60,60]) line = «=»*40 def log(s, elapsed=None): print line print secondsToStr(clock()), ‘-‘, s if elapsed: print «Elapsed time:», elapsed print line print def endlog(): end = clock() elapsed = end-start log(«End Program», secondsToStr(elapsed)) def now(): return secondsToStr(clock()) start = clock() atexit.register(endlog) log(«Start Program»)

Я также могу вызвать timing.log из моей программы, если есть значительные этапы внутри программы, которую я хочу показать. Но только в том числе import timing будет печатать время начала и окончания, а общая истекшая time. (пропустите мою непонятную secondsToStr функцию, она просто форматирует число с плавающей точкой в ​​секундах до hh: mm: ss.sss form.)

Измеряем время выполнения функции на Python | Гайд №2

Примечание. Версия Python 3 приведенного выше кода может быть найдена здесь или здесь.

PaulMcG 13 окт. 2009, в 03:59
Поделиться

Это действительно чистое решение, которое также работает, если вы нажмете Ctrl-C, чтобы остановить программу.

sorin 09 июнь 2010, в 14:31
Действительно хорошее решение и его легко интегрировать с существующим кодом. Спасибо!
nover 19 фев. 2013, в 21:25

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

c24b 15 май 2014, в 22:32
PaulMcG 18 май 2014, в 19:45

Хорошо, большое спасибо за это. Я переписал модуль. Я должен был знать, что это существовало. спасибо, что указали мне на это!

c24b 20 май 2014, в 10:44

Для Python 3 добавьте from functools import reduce сверху и поставьте квадратные скобки вокруг каждого оператора печати. Работает отлично!

PowerApp101 05 апр. 2015, в 02:02
PaulMcG 05 апр. 2015, в 04:21

Примечание: time.clock () — «устарело с версии 3.3: поведение этой функции зависит от платформы: используйте perf_counter () [с временем ожидания] или process_time () [без времени ожидания] вместо этого, в зависимости от ваших требований, чтобы иметь четко определенное поведение. «

mab 19 окт. 2015, в 13:12

Мне нравится это решение, но оно выдает ужасное предупреждение из-за неиспользованного импорта. Кроме того, прекрасно работает, хотя это может быть упрощено до меньшего количества строк

Roman Rdgz 27 окт. 2016, в 07:37
Показать ещё 7 комментариев

Читайте также:
Программа омнибус для торговых как работает

В Linux или UNIX:

time python yourprogram.py
steveha 13 окт. 2009, в 00:55
Поделиться

так что, если я запускаю другой виджет, например, в приложении QT, как мы рассчитываем время, необходимое этому виджету для отображения?

Ciasto piekarz 18 дек. 2013, в 16:47
В случае с виджетами, если вы запускаете программу на Python, используйте принятый ответ rogeriopvl.
steveha 18 дек. 2013, в 19:25
но это, кажется, не дает времени в мин: секунды, это заканчивается плавающим числом !!
Ciasto piekarz 19 дек.

2013, в 05:48

Да, это дает количество секунд. Вы можете конвертировать в мин: секунды, если хотите. Посмотрите на ответ Пола Макгуайра и его secondsToStr() .

steveha 19 дек. 2013, в 06:48
Viva Linux, так просто
Mike 03 сен. 2018, в 18:00

Показать ещё 3 комментария

import time start_time = time.clock() main() print time.clock() — start_time, «seconds»

time.clock() возвращает процессор time,, который позволяет рассчитать только time , используемые этим процессом (в любом случае, Unix). В документации говорится: «В любом случае, это функция, используемая для бенчмаркинга Python или алгоритмов синхронизации»

newacct 13 окт. 2009, в 01:44
Поделиться
time.time () лучше всего использовать на * nix. time.clock () лучше всего использовать в Windows.
Corey Goldberg 13 окт. 2009, в 14:03

Я считаю, что это не может быть использовано для расчета «только время, используемое этим процессом», потому что он использует системное время и будет зависеть от других системных процессов? Поправь меня если я ошибаюсь по этому поводу 🙂

Annan 23 июль 2013, в 10:49

Примечание: time.clock () — «устарело с версии 3.3: поведение этой функции зависит от платформы: используйте perf_counter () [с временем ожидания] или process_time () [без времени ожидания] вместо этого, в зависимости от ваших требований, чтобы иметь четко определенное поведение. «

mab 19 окт. 2015, в 13:14
Показать ещё 1 комментарий

Мне очень нравится ответ Пола МакГира, но я использую Python3. Итак, для тех, кому это интересно: вот модификация его ответа, которая работает с Python 3 на * nix (я полагаю, под Windows, что вместо time() следует использовать clock()):

#python3 import atexit from time import time, strftime, localtime from datetime import timedelta def secondsToStr(elapsed=None): if elapsed is None: return strftime(«%Y-%m-%d %H:%M:%S», localtime()) else: return str(timedelta(seconds=elapsed)) def log(s, elapsed=None): line = «=»*40 print(line) print(secondsToStr(), ‘-‘, s) if elapsed: print(«Elapsed time:», elapsed) print(line) print() def endlog(): end = time() elapsed = end-start log(«End Program», secondsToStr(elapsed)) start = time() atexit.register(endlog) log(«Start Program»)

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

Nicojo 10 сен. 2012, в 03:47
Поделиться
Я нашел timedelta(seconds=t).total_seconds() .
nu everest 28 нояб. 2015, в 12:38
Можете ли вы объяснить, что делают эти функции? что есть в команде log? что такое атексит?

SumNeuron 10 дек. 2016, в 16:35
Nicojo 10 дек. 2016, в 21:07
Показать ещё 1 комментарий

Вы можете использовать Python Profiler cProfile для измерения времени процессора и, кроме того, сколько времени затрачивается внутри каждой функции и сколько раз вызывается каждая функция. Это очень полезно, если вы хотите улучшить производительность вашего скрипта, не зная, с чего начать. Этот ответ на другой вопрос довольно хорош. Всегда хорошо заглядывать в документы.

Вот пример того, как профилировать скрипт, используя cProfile из командной строки:

$ python -m cProfile euler048.py 1007 function calls in 0.061 CPU seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 0.061 0.061 :1() 1000 0.051 0.000 0.051 0.000 euler048.py:2() 1 0.005 0.005 0.061 0.061 euler048.py:2() 1 0.000 0.000 0.061 0.061 1 0.002 0.002 0.053 0.053 1 0.000 0.000 0.000 0.000 1 0.000 0.000 0.000 0.000 1 0.003 0.003 0.003 0.003
jacwah 02 янв. 2014, в 00:56
Поделиться
Этот ответ держит мой код в чистоте.
Yu Jiaao 28 март 2018, в 00:22

Chuck 03 нояб. 2018, в 21:11
jacwah 05 нояб. 2018, в 18:52
Показать ещё 1 комментарий

Мне нравится вывод, предоставляемый модулем datetime , где time дельта-объекты показывают дни, часы, минуты и т.д., если необходимо, с точки зрения человека.

from datetime import datetime start_time = datetime.now() # do your work here end_time = datetime.now() print(‘Duration: <>’.format(end_time — start_time))

Пример вывода, например

Duration: 0:00:08.309267
Duration: 1 day, 1:51:24.269711

Обновление: Как отметил Дж. Ф. Себастьян, этот подход может столкнуться с некоторыми сложными случаями с локальным time,, поэтому безопаснее использовать:

import time from datetime import timedelta start_time = time.monotonic() end_time = time.monotonic() print(timedelta(seconds=end_time — start_time))
metakermit 29 сен. 2014, в 13:05
Поделиться
jfs 03 март 2015, в 08:31

Читайте также:
Программа для вывода звука микрофона

ОК, вы имеете в виду как start_time = time.monotonic(); end_time = time.monotonic(); timedelta(seconds=end_time — start_time) . Я верю, что вы правы, но тогда вы также должны отформатировать его, когда вернетесь datetime.timedelta(0, 0, 76) . Кроме того, кажется, монотонный метод был добавлен только в Python 3.

metakermit 04 март 2015, в 10:23

Ах хорошо. Я вижу, вы можете передать его в str() чтобы сделать его «человеческим». Я обновлю ответ, спасибо.

metakermit 04 март 2015, в 10:24
Показать ещё 1 комментарий

Еще лучше для Linux: /usr/bin/time

$ /usr/bin/time -v python rhtest2.py Command being timed: «python rhtest2.py» User time (seconds): 4.13 System time (seconds): 0.07 Percent of CPU this job got: 91% Elapsed (wall clock) time (h:mm:ss or m:ss): 0:04.58 Average shared text size (kbytes): 0 Average unshared data size (kbytes): 0 Average stack size (kbytes): 0 Average total size (kbytes): 0 Maximum resident set size (kbytes): 0 Average resident set size (kbytes): 0 Major (requiring I/O) page faults: 15 Minor (reclaiming a frame) page faults: 5095 Voluntary context switches: 27 Involuntary context switches: 279 Swaps: 0 File system inputs: 0 File system outputs: 0 Socket messages sent: 0 Socket messages received: 0 Signals delivered: 0 Page size (bytes): 4096 Exit status: 0

Обычно просто time является более простой оболочкой, которая затеняет более способную /usr/bin/time .

u0b34a0f6ae 13 окт. 2009, в 07:28
Поделиться

Решение rogeriopvl отлично работает, но если вы хотите получить более конкретную информацию, вы можете использовать встроенный профилировщик python. Проверьте эту страницу:

профилировщик сообщает вам много полезной информации, такой как time , затраченная на каждую функцию

wezzy 13 окт. 2009, в 01:17
Поделиться

Следующий фрагмент распечатывает прошедшее время в удобном для человека формате .

import time from datetime import timedelta start_time = time.time() # # Perform lots of computations. # elapsed_time_secs = time.time() — start_time msg = «Execution took: %s secs (Wall clock time)» % timedelta(seconds=round(elapsed_time_secs)) print(msg)
Sandeep 02 июль 2016, в 00:08
Поделиться

Здесь вы найдете наиболее здравый ответ («здравый смысл», означающий максимально возможную зависимость от встроенных модулей и, следовательно, наименьшее количество набираемых символов).

ijoseph 20 июль 2017, в 17:25

from time import time start_time = time() . end_time = time() time_taken = end_time — start_time # time_taken is in seconds hours, rest = divmod(time_taken,3600) minutes, seconds = divmod(rest, 60)
Qina Yan 06 апр. 2016, в 09:04
Поделиться

Устаревший с версии 3.3: поведение этой функции зависит на платформе: вместо этого используйте perf_counter() или process_time()в зависимости от ваших требований, чтобы иметь четко определенное поведение.

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

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

start = time.process_time() . do something elapsed = (time.process_time() — start)
Yas 18 май 2016, в 04:26
Поделиться

Ipython «timeit» любой script:

def foo(): %run bar.py timeit foo()
ab-user 20 май 2015, в 15:42
Поделиться

Я просмотрел модуль timeit , но, похоже, это только для небольших фрагментов кода. Я хочу time всю программу.

$ python -mtimeit -n1 -r1 -t -s «from your_module import main» «main()»

Он запускает your_module.main() функцию one time и печатает прошедший time с помощью функции time.time() в качестве таймера.

Чтобы измерить CPU time (например, не включать time в течение time.sleep() ) для каждой функции, вы можете использовать модуль profile ( cProfile на Python 2):

$ python3 -mprofile your_module.py

Вы можете передать команду -p в timeit выше, если вы хотите использовать тот же таймер, что и модуль profile .

jfs 03 март 2015, в 09:31
Поделиться

Просто используйте timeit модуль. Он работает как с Python 2, так и с Python 3

import timeit start = timeit.default_timer() #ALL THE PROGRAM STATEMETNS stop = timeit.default_timer() execution_time = stop — start print(«Program Executed in «+execution_time) #It returns time in sec

Он возвращается в секундах, и вы можете выполнить свое выполнение Time. Simple, но вы должны написать их в главной функции, которая запускает выполнение программы. Если вы хотите получить Execution time , даже когда вы получите ошибку, тогда возьмите свой параметр «Начать» и подсчитайте там, как

def sample_function(start,**kwargs): try: #your statements Except: #Except Statements stop = timeit.default_timer() execution_time = stop — start print(«Program Executed in «+execution_time)
Ravi Kumar 18 сен. 2017, в 20:17
Поделиться

Читайте также:
Как подключить контроллер к ПК программа

Мне также нравится ответ Пола МакГира и придумал форму менеджера контекста, которая соответствовала моим потребностям.

import datetime as dt import timeit class TimingManager(object): «»»Context Manager used with the statement ‘with’ to time some execution. Example: with TimingManager() as t: # Code to time «»» clock = timeit.default_timer def __enter__(self): «»» «»» self.start = self.clock() self.log(‘n=> Start Timing: <>’) return self def __exit__(self, exc_type, exc_val, exc_tb): «»» «»» self.endlog() return False def log(self, s, elapsed=None): «»»Log current time and elapsed time if present. :param s: Text to display, use ‘<>’ to format the text with the current time. :param elapsed: Elapsed time to display.

Dafault: None, no display. «»» print s.format(self._secondsToStr(self.clock())) if(elapsed is not None): print ‘Elapsed time: <>n’.format(elapsed) def endlog(self): «»»Log time for the end of execution with elapsed time. «»» self.log(‘=> End Timing: <>’, self.now()) def now(self): «»»Return current elapsed time as hh:mm:ss string. :return: String. «»» return str(dt.timedelta(seconds = self.clock() — self.start)) def _secondsToStr(self, sec): «»»Convert timestamp to h:mm:ss string. :param sec: Timestamp. «»» return str(dt.datetime.fromtimestamp(sec))
Gall 29 янв. 2015, в 15:51
Поделиться

Существует модуль timeit который можно использовать для определения времени выполнения кодов Python. Он содержит подробную документацию и примеры в документации по python (https://docs.python.org/2/library/timeit.html).

Alfie 20 окт. 2014, в 15:44
Поделиться

OP явно упоминает timeit в вопросе. Вопрос в том, как это можно использовать здесь (или следует использовать здесь и каковы альтернативы). Вот возможный ответ .

jfs 03 март 2015, в 09:06

line_profiler будет профилировать время выполнения отдельных строк кода. Профилировщик реализован в C через Cython, чтобы уменьшить накладные расходы на профилирование.

from line_profiler import LineProfiler import random def do_stuff(numbers): s = sum(numbers) l = [numbers[i]/43 for i in range(len(numbers))] m = [‘hello’+str(numbers[i]) for i in range(len(numbers))] numbers = [random.randint(1,100) for i in range(1000)] lp = LineProfiler() lp_wrapper = lp(do_stuff) lp_wrapper(numbers) lp.print_stats()
Timer unit: 1e-06 s Total time: 0.000649 s File: Function: do_stuff at line 4 Line # Hits Time Per Hit % Time Line Contents ============================================================== 4 def do_stuff(numbers): 5 1 10 10.0 1.5 s = sum(numbers) 6 1 186 186.0 28.7 l = [numbers[i]/43 for i in range(len(numbers))] 7 1 453 453.0 69.8 m = [‘hello’+str(numbers[i]) for i in range(len(numbers))]
Yu Jiaao 28 март 2018, в 07:15
Поделиться

Для данных людей, использующих ноутбуки Jupyter

В ячейке вы можете использовать магическую команду Jupyter %%time для измерения времени выполнения:

%%time [ x**2 for x in range(10000)]

Выход
Время процессора: пользовательский 4,54 мс, sys: 0 нс, всего: 4,54 мс
Время стены: 4,12 мс

Это будет захватывать только время выполнения конкретной ячейки. Если вы хотите зафиксировать время выполнения всей записной книжки (т.е. программы), вы можете создать новую записную книжку в том же каталоге и в новой записной книжке выполнить все ячейки:

Предположим, что записная книжка выше называется example_notebook.ipynb . В новой записной книжке в том же каталоге:

# Convert your notebook to a .py script: !jupyter nbconvert —to script example_notebook.ipynb # Run the example_notebook with -t flag for time %run -t example_notebook

Выход
Время загрузки процессора IPython (по оценкам): Пользователь: 0,00 с.
Система: 0,00 с.
Время стены: 0,00 с.

Источник: overcoder.net

Как работает timeit в Python?

Модуль Python timeit — это простой интерфейс для быстрого измерения времени выполнения небольших блоков кода.

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

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

Python модуль Timeit

Модуль timeit в Python

Когда дело доходит до измерения времени выполнения фрагмента кода Python, у нас есть много идей. Как насчет простого использования модуля времени и экономии времени до и после выполнения программы? Звучит легко и хорошо, но это не так.

Когда программа выполняется, также запускаются многие фоновые процессы, чтобы сделать этот код исполняемым. Модуль времени не учитывает эти процессы. Если вам нужны точные измерения производительности времени, то модуль timeit – это то, что вам нужно.

Модуль timeit в Python запускает кусок кода 1 миллион раз (значение по умолчанию) и учитывает минимальное количество времени, которое потребовалось для запуска этого фрагмента кода. Давайте посмотрим, как работает модуль здесь.

Определение времени

Есть много способов использовать модуль timeit. Один из самых простых способов – использовать его непосредственно в CLI. Мы сделаем это в нашем первом примере, прежде чем перейти к другим примерам.

Пример

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru