Модуль time — низкоуровневая работа со временем
Модуль time — это тонкий слой над функциями операционной системы для работы
со временем. Если datetime — про «человеческие» даты, то time — про
секунды, таймеры, паузы и Unix-время.
import time
Когда использовать time, а не datetime
Измерить, сколько секунд работает кусок кода —
time.Подождать N секунд —
time.Получить Unix-timestamp —
time.Работать с календарной датой —
datetime.Часовые пояса, форматирование, арифметика дат —
datetime.
Unix-время: time.time()
Возвращает количество секунд (с дробной частью) с 1 января 1970 года 00:00 UTC.
import time
print(time.time())
# 1778843025.123456
Используется как метка времени, как primary key, для измерений длительностей, для генерации уникальных имён файлов.
Чтобы перевести Unix-время в обычную дату:
from datetime import datetime, timezone
import time
ts = time.time()
print(datetime.fromtimestamp(ts)) # локальное
print(datetime.fromtimestamp(ts, tz=timezone.utc)) # UTC
Пауза: time.sleep(seconds)
Приостанавливает выполнение на указанное число секунд. Принимает float — можно ждать дробные секунды.
import time
print('Начало')
time.sleep(2.5) # пауза 2.5 секунды
print('Прошло 2.5 с')
Самые частые применения:
подождать ответа от внешнего сервиса;
сделать паузу между запросами к API (избежать rate-limit);
визуальная задержка в учебных программах и играх.
Предупреждение
time.sleep блокирует поток. В асинхронном коде используйте
await asyncio.sleep(...), иначе подвесите весь event loop.
Измерение времени выполнения
Для бенчмарков используют не time.time(), а time.perf_counter().
Он точнее и не «прыгает» при переводе системных часов.
import time
start = time.perf_counter()
# ... код, который измеряем ...
total = sum(i*i for i in range(10**6))
elapsed = time.perf_counter() - start
print(f'Выполнено за {elapsed:.4f} с')
Чтобы измерить процессорное время (без учёта sleep, ожидания I/O) —
time.process_time().
функция что измеряет когда брать
------ ------------ ----------
time.time() wall-clock UTC timestamps
time.perf_counter() монотонный счётчик бенчмарки длительности
time.monotonic() монотонный счётчик таймеры, deadline
time.process_time() CPU-время процесса профилирование вычислений
Декоратор-таймер
Удобно сделать декоратор для замера любых функций:
import time
from functools import wraps
def timed(func):
@wraps(func)
def wrapper(*args, **kwargs):
start = time.perf_counter()
result = func(*args, **kwargs)
print(f'{func.__name__} -> {time.perf_counter() - start:.4f} с')
return result
return wrapper
@timed
def slow():
total = 0
for i in range(10**6):
total += i
return total
slow()
# slow -> 0.0623 с
Структурированное время: struct_time
Старый API модуля time. time.localtime() и time.gmtime() возвращают
именованный кортеж struct_time:
import time
t = time.localtime()
print(t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour)
# 2026 5 14 10
Форматирование и парсинг — через time.strftime и time.strptime
(аналогично datetime):
import time
print(time.strftime('%Y-%m-%d %H:%M:%S'))
# 2026-05-14 10:30:45
В новых программах удобнее datetime. struct_time остаётся в основном
для совместимости.
Практический пример: rate-limit для API
Не больше одного запроса в секунду:
import time
def make_rate_limiter(min_interval):
last_call = 0.0
def wait():
nonlocal last_call
now = time.monotonic()
sleep_for = min_interval - (now - last_call)
if sleep_for > 0:
time.sleep(sleep_for)
last_call = time.monotonic()
return wait
throttle = make_rate_limiter(1.0)
for url in urls:
throttle()
fetch(url)
Для таймеров берём monotonic — он гарантированно не идёт назад, даже если
кто-то перевёл системные часы.
Практический пример: повтор с задержкой
import time
def retry(func, attempts=5, delay=1.0, backoff=2.0):
for attempt in range(attempts):
try:
return func()
except Exception as e:
if attempt == attempts - 1:
raise
print(f'Попытка {attempt+1} не удалась: {e}. Жду {delay} с')
time.sleep(delay)
delay *= backoff
Это классический паттерн «exponential backoff» — задержка увеличивается с каждой неудачей.
Подводные камни
Предупреждение
``time.time()`` может идти назад. Например, при NTP-синхронизации. Для длительностей используйте
time.monotonic()илиtime.perf_counter().``time.sleep`` блокирует поток. В async-коде используйте
asyncio.sleep. В GUI — таймеры фреймворка, иначе подвиснет интерфейс.Точность ``sleep`` ограничена ОС. На Windows минимальная задержка часто ~15 мс, даже если попросили
sleep(0.001).Timezone и timestamp.
time.time()всегда даёт UTC-секунды.time.localtime()уже учитывает локаль и пояс ОС — это часто источник багов на серверах с неправильной TZ.
Смотрите также
Модуль datetime — даты и время в Python — высокоуровневая работа с датами
Декораторы в Python — декораторы (примеры с
timed)
Примечание
Лицензия и источники
Часть материала адаптирована из официальной документации Python (https://docs.python.org/3/library/time.html), доступной под Python Software Foundation License Version 2 (PSF License). Адаптация, переработка, оригинальные примеры и пояснения — © AlashEd Wiki.