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

How do I measure elapsed time in Python?

Как мне измерить затраченное время в Python?

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

import timeit
start = timeit.timeit()
print("hello")
end = timeit.timeit()
print(end - start)
Переведено автоматически
Ответ 1

Используйте time.time() для измерения времени, прошедшего с настенных часов между двумя точками:

import time

start = time.time()
print("hello")
end = time.time()
print(end - start)

Это дает время выполнения в секундах.


Другим вариантом, начиная с Python 3.3, может быть использование perf_counter или process_time, в зависимости от ваших требований. До версии 3.3 было рекомендовано использовать time.clock (спасибо Amber). Однако в настоящее время он устарел:


В Unix возвращайте текущее процессорное время в виде числа с плавающей запятой, выраженного в секундах. Точность и, фактически, само определение значения “процессорного времени” зависит от точности одноименной функции C.


В Windows эта функция возвращает секунды настенных часов, прошедшие с момента первого вызова этой функции, в виде числа с плавающей запятой, на основе функции Win32 QueryPerformanceCounter(). Разрешение обычно лучше одной микросекунды.


Устарела с версии 3.3: поведение этой функции зависит от платформы: используйте perf_counter() или process_time() вместо этого, в зависимости от ваших требований, для обеспечения четко определенного поведения.


Ответ 2

Используйте timeit.default_timer вместо timeit.timeit. Первое автоматически определяет наилучшие часы, доступные на вашей платформе и версии Python:

from timeit import default_timer as timer

start = timer()
# ...
end = timer()
print(end - start) # Time in seconds, e.g. 5.38091952400282

timeit.default_timer присваивается time.time() или time.clock() в зависимости от операционной системы. В Python 3.3+ default_timer является time.perf_counter() на всех платформах. Смотрите Python - time.clock() против time.time() - точность?

Смотрите также:

Ответ 3

Только для Python 3:

Поскольку time.clock() устарело с версии Python 3.3, вы захотите использовать time.perf_counter() для общесистемной синхронизации или time.process_time() для синхронизации всего процесса, точно так же, как вы привыкли использовать time.clock():

import time

t = time.process_time()
#do some stuff
elapsed_time = time.process_time() - t

Новая функция process_time не будет учитывать время, прошедшее во время ожидания.

Ответ 4

Измерение времени в секундах:

from timeit import default_timer as timer
from datetime import timedelta

start = timer()

# ....
# (your code runs here)
# ...

end = timer()
print(timedelta(seconds=end-start))

Вывод:

0:00:01.946339
python performance