Как узнать время выполнения программы на Python?
У меня есть консольная программа на Python, которая выполняется довольно долго. Я хочу узнать точное время, затраченное на её выполнение.
Я рассматривал модуль timeit
, но он, похоже, предназначен только для небольших фрагментов кода. Мне нужно замерить время выполнения всей программы.
5 ответ(ов)
Самый простой способ в Python:
import time
start_time = time.time()
main()
print("--- %s seconds ---" % (time.time() - start_time))
Этот код предполагает, что ваша программа выполняется как минимум одну десятую секунды.
Вывод будет выглядеть следующим образом:
--- 0.764891862869 seconds ---
Если вам нравится вывод, который предоставляет модуль datetime
, где объекты временных промежутков показываются в виде дней, часов, минут и т. д. в удобочитаемом формате, вы можете использовать следующий код:
from datetime import datetime
start_time = datetime.now()
# выполните вашу работу здесь
end_time = datetime.now()
print('Длительность: {}'.format(end_time - start_time))
Пример вывода может выглядеть так:
Длительность: 0:00:08.309267
или так:
Длительность: 1 день, 1:51:24.269711
Однако, как упомянул J.F. Sebastian, при использовании этого подхода могут возникать некоторые сложные случаи с местным временем. Поэтому более безопасным решением будет использование модуля time
:
import time
from datetime import timedelta
start_time = time.monotonic()
# выполните вашу работу здесь
end_time = time.monotonic()
print(timedelta(seconds=end_time - start_time))
Используя time.monotonic()
, вы избегаете недостатков, связанных с изменением системного времени, и получаете стабильное измерение времени выполнения вашей задачи.
Данный код использует time.clock()
, чтобы измерить время выполнения функции main()
. Однако стоит отметить, что time.clock()
возвращает процессорное время, которое отражает только время, затраченное на выполнение текущего процесса (в Unix-системах). Это может быть полезно для бенчмаркинга или измерения временной сложности алгоритмов, как говорится в документации: "в любом случае, эта функция подходит для бенчмаркинга Python или оценки времени выполнения алгоритмов".
Тем не менее, стоит учесть, что time.clock()
устарел и может не поддерживаться в будущих версиях Python. Рекомендуется использовать time.perf_counter()
для более точного измерения времени, так как эта функция возвращает одно из самых точных значений времени, включая время сна, и лучше подходит для профилирования Python-кода.
Вот как можно переписать ваш код с использованием time.perf_counter()
:
import time
start_time = time.perf_counter()
main()
print(time.perf_counter() - start_time, "seconds")
Таким образом, вы получите более точное и надежное измерение времени выполнения вашей программы.
Просто используйте модуль timeit
. Он работает как с Python 2, так и с Python 3.
import timeit
start = timeit.default_timer()
# Все операторы программы
stop = timeit.default_timer()
execution_time = stop - start
print("Программа выполнена за " + str(execution_time)) # Время в секундах
Этот код возвращает время в секундах, и вы можете получить время выполнения вашей программы. Это просто, но лучше писать такой код в основной функции, которая запускает выполнение программы. Если вы хотите получить время выполнения даже при возникновении ошибки, передайте параметр start
в функцию и вычислите время в блоке except
, как показано ниже:
def sample_function(start, **kwargs):
try:
# Ваши операторы
except:
# Операторы в блоке except выполняются, когда ваши операторы вызывают исключение
stop = timeit.default_timer()
execution_time = stop - start
print("Программа выполнена за " + str(execution_time))
Таким образом, вы сможете отслеживать время выполнения вашей программы, даже если возникнет ошибка.
time.clock
был устаревшим в Python 3.3 и будет удален в Python 3.8. Вместо него рекомендуется использовать time.perf_counter
или time.process_time
.
Вот пример использования time.perf_counter
, который измеряет время выполнения блока кода:
import time
start_time = time.perf_counter() # Начало отсчета времени
for x in range(1, 100):
print(x)
end_time = time.perf_counter() # Конец отсчета времени
# Вывод времени выполнения в секундах
print(end_time - start_time, "seconds")
В этом коде time.perf_counter
дает наилучший доступный таймер, который может использоваться для измерения интервалов времени с высокой точностью.
Как получить день недели по заданной дате?
Вызов функции модуля по его имени (строке)
Изменение типа столбца в pandas
Как измерить время выполнения метода в Java?
Как заполнить строку в Python пробелами?