Вопрос-Ответ

How do I get time of a Python program's execution?

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

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

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

Переведено автоматически
Ответ 1

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

import time
start_time = time.time()
main()
print("--- %s seconds ---" % (time.time() - start_time))

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

С принтами:

--- 0.764891862869 seconds ---
Ответ 2

В Linux или Unix:

$ time python yourprogram.py

В Windows смотрите этот вопрос StackOverflow: Как мне измерить время выполнения команды в командной строке Windows?

Для более подробного вывода,

$ time -v python yourprogram.py
Command being timed: "python3 yourprogram.py"
User time (seconds): 0.08
System time (seconds): 0.02
Percent of CPU this job got: 98%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.10
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): 9480
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 1114
Voluntary context switches: 0
Involuntary context switches: 22
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
Ответ 3

Я помещаю этот 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 выведет время начала и окончания, а также общее прошедшее время. (Простите за непонятную secondsToStr функцию, она просто форматирует количество секунд с плавающей запятой в форму hh: mm: ss.sss.)

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

Ответ 4

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

Например:

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