Измерение пройденного времени с модулем Time в Python
Быстрый ответ
Для того чтобы узнать, сколько времени занимает выполнение кода на Python, нам пригодится модуль time
. Нуобходимо зафиксировать текущее время перед началом и после выполнения блока кода; соответствующая разница будет указывать на затраченное время:
import time
start = time.time() # Фиксируем время старта
# Здесь располагаем ваш код
elapsed = time.time() – start # Останавливаем таймер
print(f"Затрачено времени: {elapsed} сек")
Таким образом, можно определить время, затраченное на выполнение функций или программ, в секундах.
Увеличение точности и профилирование
Если вам требуется более высокая точность измерения времени выполнения кода, модуль time
предлагает функцию time.perf_counter()
. Эта функция обеспечивает микросекундную точность и монотонность значений, благодаря которым она становится надёжным инструментом для измерения времени. Однако стоит отметить, что она не подходит для измерения интервалов времени, превышающих 100 дней.
Декораторы основанные на functools.wraps
помогут профилировать время выполнения различных функций, при этом сохраняя метаданные функции, к которой применяется декоратор.
import time
import functools
prof_data = {}
def profile(func):
@functools.wraps(func)
def wrap(*args, **kwargs):
start_time = time.perf_counter()
result = func(*args, **kwargs)
elapsed_time = time.perf_counter() – start_time
prof_data.setdefault(func.__name__, []).append(elapsed_time)
return result
return wrap
Для профилирования времени выполнения функции достаточно добавить к ней декоратор @profile
:
@profile
def your_function():
# Здесь ваш код
pass
Используйте функции print_prof_data()
для вывода собранных данных по времени выполнения и clear_prof_data()
, чтобы сбросить данные перед новыми замерами.
Определение подходящего таймера для задачи
Функция модуля time
, которую вам выбрать, зависит от типа решаемой задачи. Функция time.process_time()
идеально подходит для измерения затраченного процессорного времени, а функцию time.sleep()
стоит использовать для имитации задержек или при ожидании выполнения операций ввода-вывода.
Осознание разницы между процессорным временем (временем занятости ЦП) и временем в реальности (реальным временем выполнения) важно для правильного понимания и измерения времени работы вашего кода.
Визуализация
На примере забега отобразим измерение времени с помощью секундомера:
Старт: |⏱️| -----------------------> |🏁|
Измеряемым временем является временной интервал между нажатиями кнопок "старт" и "стоп" на секундомере.
import time
start_time = time.time() # Старт!
# ...код начинает выполняться...
end_time = time.time() # Финиш!
elapsed_time = end_time – start_time # Время фиксировано
|⏱️ Старт| ------ *Измеряемое Время* ------> |🏁 Финиш|
Здесь каждая черточка олицетворяет одну секунду. Главное – не забыть зафиксировать время начала и окончания, чтобы впоследствии вычесть одно из них из другого.
Измерение времени с максимальной точностью
Если нужда в высокоточных измерениях, в Python версии 3.7 и выше следует рассмотреть применение функции datetime.now()
:
from datetime import datetime
start = datetime.now()
# Здесь код для вычисления времени выполнения
elapsed = datetime.now() – start
print(f"Затраченное время: {elapsed.total_seconds()} сек")
При использовании функции time.strftime()
и time.gmtime()
, вы сможете добиться еще более красивого отображения времени:
import time
elapsed_seconds = time.time() – start
formatted_time = time.strftime("%H:%M:%S", time.gmtime(elapsed_seconds))
print(f"Отформатированное время: {formatted_time}")
В случае длительных операций рекомендуется использовать монотонные таймеры time.perf_counter()
или time.monotonic()
.
Полезные материалы
- Официальная документация модуля времени Python — подробности работы с модулем
time
. - Документация модуля
timeit
— замеры времени выполнения отдельных фрагментов кода. - SO: Как измерить затраченное время в Python? — обсуждения и решения сообщества разработчиков.
- Использование функции
time.sleep()
для создания задержек — организация пауз в выполнении кода. - Работа с датой и временем в Python — знакомство с основами работы с типами данных, связанными со временем.
- Магические команды в IPython — удобные функции для работы со временем в интерактивной оболочке IPython.
- Видеоуроки по модулю
datetime
— подробное объяснение работы модуляdatetime
.