Чем отличаются time.time() и time.monotonic() в Python и когда их использовать

Ответ

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

time.time()

  • Что делает: Возвращает системное "wall-clock" время (реальное время) в секундах с начала Эпохи Unix (00:00:00 UTC 1 января 1970 г.).
  • Особенность: Это время не является монотонным. Оно может "прыгать" вперед или назад из-за синхронизации системных часов по сети (NTP) или ручного перевода времени пользователем.
  • Когда использовать: Для получения абсолютной временной метки, которую нужно сохранить, отобразить пользователю или синхронизировать с другими системами.

time.monotonic()

  • Что делает: Возвращает значение монотонно возрастающих часов. Его начальная точка не определена, поэтому абсолютное значение само по себе не имеет смысла.
  • Особенность: Гарантированно никогда не уменьшается. Идеально подходит для измерения временных интервалов.
  • Когда использовать: Для измерения длительности операций: вычисления таймаутов, бенчмарков, оценки производительности кода.

Практический пример:

import time

start_real = time.time()
start_mono = time.monotonic()

print("Выполняем операцию...")
# Представим, что во время sleep системное время было скорректировано назад на 5 секунд
time.sleep(2)

end_real = time.time()
end_mono = time.monotonic()

# Этот результат может быть неверным (например, отрицательным) при смене системного времени
print(f"time.time() интервал: {end_real - start_real:.2f} сек.")

# Этот результат всегда будет корректным
print(f"time.monotonic() интервал: {end_mono - start_mono:.2f} сек.")

Ключевое правило: Используйте time.time() для ответа на вопрос "Который час?", а time.monotonic() для ответа на вопрос "Сколько времени прошло?".