Как проверить время работы программы python

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

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

автор: Peter Mortensen

24 ответов

самый простой способ в Python:

import time start_time = time.time() main() print(«— %s seconds —» % (time.time() — start_time))

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

— 0.764891862869 seconds —
автор: rogeriopvl

Я положил это timing.py модуль в свои

автор: PaulMcG

в Linux или UNIX:

time python yourprogram.py
автор: steveha
import time start_time = time.clock() main() print time.clock() — start_time, «seconds»

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

Как измерить быстродействие кода. Python. Александр Килинкаров

автор: newacct

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

#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

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

вот пример того, как профилировать скрипт с помощью 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

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

Расчёт времени выполнения программы на python #short


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
import time from datetime import timedelta start_time = time.monotonic() end_time = time.monotonic() print(timedelta(seconds=end_time — start_time))
автор: metakermit

еще лучше для 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

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

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

автор: wezzy

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

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
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

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

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

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

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

$ python3 -mprofile your_module.py

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

Ipython «timeit» любой скрипт:

def foo(): %run bar.py timeit foo()
автор: ab-user

времени.clock()

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

времени.perf_counter()

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

времени.process_time()

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

start = time.process_time() . do something elapsed = (time.process_time() — start)

Просто Использовать 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

он возвращается через несколько секунд, и Вы можете иметь время выполнения. Просто, но вы должны написать их в основной функции, которая запускает выполнение программы. Если вы хотите получить время выполнения, даже если вы получаете ошибку, то возьмите свой параметр «Start» и вычислите его как

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

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

автор: Alfie

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

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

Читайте также:
Название программы подготовка к школе

это ответ пола Макгира, который работает для меня. На случай, если у кого-то возникнут проблемы с управлением.

import atexit from time import clock def reduce(function, iterable, initializer=None): it = iter(iterable) if initializer is None: value = next(it) else: value = initializer for element in it: value = function(value, element) return value 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) def endlog(): end = clock() elapsed = end-start log(«End Program», secondsToStr(elapsed)) def now(): return secondsToStr(clock()) def main(): start = clock() atexit.register(endlog) log(«Start Program»)

вызов timing.main() из вашей программы после импорта файла.

автор: Saurabh Rana

Timeit-класс в python, используемый для вычисления времени выполнения небольших блоков кода.

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

пример кода выглядит следующим образом:

from timeit import default_timer as timer start= timer() #some logic end = timer() print(«Time taken:», end-start)
автор: Utkarsh Dhawan

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

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

в ячейку, вы можете использовать Jupyter это %%time волшебная команда для измерения времени выполнения:

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

выход
Время процессора: пользователь 4.54 ms, sys: 0 ns, всего: 4.54 ms
Время стены: 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 s.
Система: 0.00 s.
Время стены: 0.00 s.

автор: Matt

использовать обновленный ответ metakermit для python 2.7 вам потребуется монотонная.

код будет выглядеть следующим образом:

from datetime import timedelta from monotonic import monotonic start_time = monotonic() end_time = monotonic() print(timedelta(seconds=end_time — start_time))
автор: H0R5E

время выполнения программы Python может быть несовместимым в зависимости от:

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

Это потому, что наиболее эффективным способом является использование «Порядок роста» и выучите большую нотацию «о», Чтобы сделать это правильно,https://en.wikipedia.org/wiki/Big_O_notation

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

import time now = time.time() future = now + 10 step = 4 # why 4 steps? because until here already 4 operations executed while time.time() < future: step += 3 # why 3 again? because while loop execute 1 comparison and 1 plus equal statement step += 4 # why 3 more? because 1 comparison starting while when time is over plus final assignment of step + 1 and print statement print(str(int(step / 10)) + » steps per second»)

надеюсь, это поможет вам.

автор: Manu

я использовал очень простую функцию для синхронизации части выполнения кода:

import time def timing(): start_time = time.time() return lambda x: print(«[s] <>».format(time.time() — start_time, x))

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

t = timing() train = pd.read_csv(‘train.csv’, dtype=< ‘id’: str, ‘vendor_id’: str, ‘pickup_datetime’: str, ‘dropoff_datetime’: str, ‘passenger_count’: int, ‘pickup_longitude’: np.float64, ‘pickup_latitude’: np.float64, ‘dropoff_longitude’: np.float64, ‘dropoff_latitude’: np.float64, ‘store_and_fwd_flag’: str, ‘trip_duration’: int, >, parse_dates = [‘pickup_datetime’, ‘dropoff_datetime’], ) t(«Loaded <> rows data from ‘train'».format(len(train)))

тогда выход будет выглядеть так:

[9.35s] Loaded 1458644 rows data from ‘train’

Я чувствую себя немного элегантной таким образом.

Источник: askdev.ru

Как получить time выполнения программы Python?

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

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

25 ответов

1166 Решение rogeriopvl [2009-10-13 03:00:00]

Самый простой способ в Python:

import time start_time = time.time() main() print(«— %s seconds —» % (time.time() — start_time))

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

— 0.764891862869 seconds —

181 PaulMcG [2009-10-13 05:08:00]

Я помещаю этот модуль 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 3 приведенного выше кода может быть найдена здесь или здесь.

131 steveha [2009-10-13 02:59:00]

В Linux или UNIX:

time python yourprogram.py

52 newacct [2009-10-13 04:25:00]

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

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

47 Nicojo [2012-09-10 05:03:00]

Мне очень нравится ответ Пола МакГира, но я использую 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»)

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

41 jacwah [2014-01-02 03:35:00]

Вы можете использовать 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

Мне нравится вывод, предоставляемый модулем 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))

Еще лучше для 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 .

12 wezzy [2009-10-13 03:07:00]

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

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

10 Sandeep [2016-07-02 01:24:00]

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

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)

9 Qina Yan [2016-04-06 10:45:00]

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)

8 Yas [2016-05-18 06:49:00]

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

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

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

start = time.process_time() . do something elapsed = (time.process_time() — start)

7 jfs [2015-03-03 12:04:00]

Я просмотрел модуль 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 .

7 ab-user [2015-05-20 17:40:00]

Ipython «timeit» любой script:

def foo(): %run bar.py timeit foo()

Просто используйте 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)

5 Alfie [2014-10-20 17:55:00]

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

5 Gall [2015-01-29 18:42:00]

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

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))

Читайте также:
Как сохранить программу в паскале на компьютер

4 Yu Jiaao [2018-03-28 08:43:00]

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))]

3 Matt [2018-07-28 19:48:00]

Для данных людей, использующих ноутбуки 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 с.

Это ответ Paul McGuire, который работает для меня. На всякий случай у кого-то возникли проблемы с запуском этого.

import atexit from time import clock def reduce(function, iterable, initializer=None): it = iter(iterable) if initializer is None: value = next(it) else: value = initializer for element in it: value = function(value, element) return value 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) def endlog(): end = clock() elapsed = end-start log(«End Program», secondsToStr(elapsed)) def now(): return secondsToStr(clock()) def main(): start = clock() atexit.register(endlog) log(«Start Program»)

вызывать timing.main() из вашей программы после импорта файла.

Timeit — это класс в python, используемый для вычисления выполнения time небольших блоков кода.

Default_timer — это метод в этом классе, который используется для измерения времени настенных часов, а не выполнения ЦП time.. Таким образом, другое выполнение процесса может помешать этому. Таким образом, это полезно для небольших блоков кода.

Образец кода выглядит следующим образом:

from timeit import default_timer as timer start= timer() #some logic end = timer() print(«Time taken:», end-start)

1 H0R5E [2017-06-16 16:18:00]

Чтобы использовать обновленный ответ metakermit для python 2.7, вам потребуется monotonic.

Тогда код будет выглядеть следующим образом:

from datetime import timedelta from monotonic import monotonic start_time = monotonic() end_time = monotonic() print(timedelta(seconds=end_time — start_time))

Если вы хотите измерять время в микросекундах, то вы можете использовать следующую версию, полностью основанную на ответах Пола Макгуайра и Никохо, — это код Python3. Я также добавил немного цвета к нему:

import atexit from time import time from datetime import timedelta, datetime def seconds_to_str(elapsed=None): if elapsed is None: return datetime.now().strftime(«%Y-%m-%d %H:%M:%S.%f») else: return str(timedelta(seconds=elapsed)) def log(txt, elapsed=None): colour_cyan = ‘33[36m’ colour_reset = ‘33[0;0;39m’ colour_red = ‘33[31m’ print(‘n ‘ + colour_cyan + ‘ [TIMING]> [‘ + seconds_to_str() + ‘] —-> ‘ + txt + ‘n’ + colour_reset) if elapsed: print(«n » + colour_red + » [TIMING]> Elapsed time ==> » + elapsed + «n» + colour_reset) def end_log(): end = time() elapsed = end-start log(«End Program», seconds_to_str(elapsed)) start = time() atexit.register(end_log) log(«Start Program»)

log() => функция, которая печатает информацию о времени.

txt ==> первый аргумент в логе и строка для отметки времени.

atexit ==> модуль python для регистрации функций, которые вы можете вызывать при выходе из программы.

0 Manu [2017-07-31 18:13:00]

time меры выполнения программы Python может быть непоследовательной в зависимости от:

  • Та же программа может быть оценена с использованием разных алгоритмов
  • Запуск time изменяется между алгоритмами
  • Запуск time зависит от реализации
  • Запуск time варьируется между компьютерами
  • Запуск time не предсказуем на основе небольших входов

Это связано с тем, что наиболее эффективным способом является использование «Ордена роста» и изучение записи «Большой буквы», чтобы сделать это правильно, https://en.wikipedia.org/wiki/Big_O_notation

В любом случае вы можете попытаться оценить производительность любой программы Python на определенных этапах машинного счета в секунду, используя этот простой алгоритм: адаптируйте это к программе, которую хотите оценить

import time now = time.time() future = now + 10 step = 4 # why 4 steps? because until here already 4 operations executed while time.time() < future: step += 3 # why 3 again? because while loop execute 1 comparison and 1 plus equal statement step += 4 # why 3 more? because 1 comparison starting while when time is over plus final assignment of step + 1 and print statement print(str(int(step / 10)) + » steps per second»)

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

0 Tao Wang [2018-08-07 08:42:00]

Я использовал очень простую функцию для определения времени выполнения кода:

import time def timing(): start_time = time.time() return lambda x: print(«[s] <>».format(time.time() — start_time, x))

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

t = timing() train = pd.read_csv(‘train.csv’, dtype=< ‘id’: str, ‘vendor_id’: str, ‘pickup_datetime’: str, ‘dropoff_datetime’: str, ‘passenger_count’: int, ‘pickup_longitude’: np.float64, ‘pickup_latitude’: np.float64, ‘dropoff_longitude’: np.float64, ‘dropoff_latitude’: np.float64, ‘store_and_fwd_flag’: str, ‘trip_duration’: int, >, parse_dates = [‘pickup_datetime’, ‘dropoff_datetime’], ) t(«Loaded <> rows data from ‘train'».format(len(train)))

Тогда вывод будет выглядеть так:

[9.35s] Loaded 1458644 rows data from ‘train’

Я чувствую себя немного элегантно в этом смысле.

Источник: qarchive.ru

One step to space

My notes about CG-art, 3D design, digital photo and programming. If you find these notes useful fill free to contact me or leave comments.

Sunday, 27 January 2013

Как измерить время выполнения секции кода в python

Пришлось реализовать замер времени выполнения кода и вспомнил один вариант на который когда-то натолкнулся. (К сожалению ссылку на оригинал потерял, но принцип очень простой).
Создаём класс с двумя переопределёнными методами:

import time class Profiler(object): def __enter__(self): self._startTime = time.time() def __exit__(self, type, value, traceback): print «Elapsed time: sec».format(time.time() — self._startTime)

И далее в коде используем следующим образом:

with Profiler() as p: // your code to be profiled here

Соответсвенно всё понятно из приведённого примера. При входе в конструкцию with объект создаётся, а при выходе гарантированно завершается. Даже при возникновении исключения.
Очень хорошая статья поясняющая детали.
Если есть ещё какие-нибудь красивые методы был бы рад о них услышать.

Источник: onesteptospace.blogspot.com

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