18

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

6

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

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

5 ответ(ов)

30

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

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

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

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

--- 0.764891862869 seconds ---
1

Если вам нравится вывод, который предоставляет модуль 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(), вы избегаете недостатков, связанных с изменением системного времени, и получаете стабильное измерение времени выполнения вашей задачи.

1

Данный код использует 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")

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

0

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

Таким образом, вы сможете отслеживать время выполнения вашей программы, даже если возникнет ошибка.

0

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 дает наилучший доступный таймер, который может использоваться для измерения интервалов времени с высокой точностью.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь