Как узнать время выполнения программы на 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 дает наилучший доступный таймер, который может использоваться для измерения интервалов времени с высокой точностью.
Как получить день недели по заданной дате?
Возвращает ли time.time() в Python локальную или UTC метку времени?
Как изменить порядок столбцов в DataFrame?
'pip' не распознан как командa внутреннего или внешнего формата
Почему statistics.mean() работает так медленно?