Как получить время выполнения программы на Python? - PullRequest
742 голосов
/ 13 октября 2009

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

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

Ответы [ 27 ]

2 голосов
/ 16 ноября 2017

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

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

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

from timeit import default_timer as timer

start= timer()

#some logic 

end = timer() 

print("Time taken:", end-start) 
2 голосов
/ 08 апреля 2015

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

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() из вашей программы после импорта файла.

1 голос
/ 16 июня 2017

Для использования обновленного ответа 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))
0 голосов
/ 21 июня 2019

Это самый простой способ получить истекшее время для программы: -

Напишите следующий код в конце вашей программы.

import time
print(time.clock())
0 голосов
/ 16 февраля 2019

вы можете получить очень простой способ в Python, не нужно делать много сложных

import time start = time.localtime() end = time.localtime() """Total execution time in second$ """ print(end.tm_sec - start.tm_sec)

0 голосов
/ 20 декабря 2018

Если вы хотите измерить время в микросекундах, вы можете использовать следующую версию, полностью основанную на ответах Пола Макгуайра и Nicojo - это код 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 = '\033[36m'
    colour_reset = '\033[0;0;39m'
    colour_red = '\033[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 голосов
/ 31 июля 2017

Время выполнения программы 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")

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...