Измерение пройденного времени с модулем Time в Python

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для того чтобы узнать, сколько времени занимает выполнение кода на Python, нам пригодится модуль time. Нуобходимо зафиксировать текущее время перед началом и после выполнения блока кода; соответствующая разница будет указывать на затраченное время:

Python
Скопировать код
import time

start = time.time()  # Фиксируем время старта

# Здесь располагаем ваш код

elapsed = time.time() – start  # Останавливаем таймер
print(f"Затрачено времени: {elapsed} сек")

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

Кинга Идем в IT: пошаговый план для смены профессии

Увеличение точности и профилирование

Если вам требуется более высокая точность измерения времени выполнения кода, модуль time предлагает функцию time.perf_counter(). Эта функция обеспечивает микросекундную точность и монотонность значений, благодаря которым она становится надёжным инструментом для измерения времени. Однако стоит отметить, что она не подходит для измерения интервалов времени, превышающих 100 дней.

Декораторы основанные на functools.wraps помогут профилировать время выполнения различных функций, при этом сохраняя метаданные функции, к которой применяется декоратор.

Python
Скопировать код
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:

Python
Скопировать код
@profile
def your_function():
    # Здесь ваш код
    pass

Используйте функции print_prof_data() для вывода собранных данных по времени выполнения и clear_prof_data(), чтобы сбросить данные перед новыми замерами.

Определение подходящего таймера для задачи

Функция модуля time, которую вам выбрать, зависит от типа решаемой задачи. Функция time.process_time() идеально подходит для измерения затраченного процессорного времени, а функцию time.sleep() стоит использовать для имитации задержек или при ожидании выполнения операций ввода-вывода.

Осознание разницы между процессорным временем (временем занятости ЦП) и временем в реальности (реальным временем выполнения) важно для правильного понимания и измерения времени работы вашего кода.

Визуализация

На примере забега отобразим измерение времени с помощью секундомера:

Markdown
Скопировать код
Старт: |⏱️| -----------------------> |🏁|

Измеряемым временем является временной интервал между нажатиями кнопок "старт" и "стоп" на секундомере.

Python
Скопировать код
import time
start_time = time.time()  # Старт!
# ...код начинает выполняться...
end_time = time.time()    # Финиш!
elapsed_time = end_time – start_time  # Время фиксировано
Markdown
Скопировать код
|⏱️ Старт| ------ *Измеряемое Время* ------> |🏁 Финиш|

Здесь каждая черточка олицетворяет одну секунду. Главное – не забыть зафиксировать время начала и окончания, чтобы впоследствии вычесть одно из них из другого.

Измерение времени с максимальной точностью

Если нужда в высокоточных измерениях, в Python версии 3.7 и выше следует рассмотреть применение функции datetime.now():

Python
Скопировать код
from datetime import datetime

start = datetime.now()

# Здесь код для вычисления времени выполнения

elapsed = datetime.now() – start
print(f"Затраченное время: {elapsed.total_seconds()} сек")

При использовании функции time.strftime() и time.gmtime(), вы сможете добиться еще более красивого отображения времени:

Python
Скопировать код
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().

Полезные материалы

  1. Официальная документация модуля времени Python — подробности работы с модулем time.
  2. Документация модуля timeit — замеры времени выполнения отдельных фрагментов кода.
  3. SO: Как измерить затраченное время в Python? — обсуждения и решения сообщества разработчиков.
  4. Использование функции time.sleep() для создания задержек — организация пауз в выполнении кода.
  5. Работа с датой и временем в Python — знакомство с основами работы с типами данных, связанными со временем.
  6. Магические команды в IPython — удобные функции для работы со временем в интерактивной оболочке IPython.
  7. Видеоуроки по модулю datetime — подробное объяснение работы модуля datetime.