# dgtimer

**dgtimer** — простой и расширяемый Python-таймер с поддержкой измерения времени выполнения кода, декораторов, форматированного вывода, работы с разными логгерами (logging и dglog), а также автоименованием и несколькими таймерами в одном экземпляре.

---

## Особенности

- Несколько параллельных таймеров по имени (`Timer.start(name=...)`, `Timer.stop(name=...)`)
- Дружественный и лаконичный формат времени (секунды, минуты, часы, "HH:MM:SS", "mm:ss")
- Можно просто `print`, можно логировать через ваш logger (logging или dglog — опционально)
- Декоратор `@exec_time` для обёртывания функций/методов — мгновенное логирование времени исполения
- Необязательный импорт dglog (не установлен — всё равно работает с logging)
- Чистый код и пример main на практике

---

## Установка

Сам пакет можно просто скопировать в свой проект как файл `dgtimer.py`.  
Из зависимостей нужен только стандартный Python 3.8+ и PyPI-пакет `dglog` (не обязательно).

---

## Минимальный пример использования

```python
from dgtimer import Timer

t = Timer()
t.start(name="train")
# ... algo ...
t.stop(name="train", format_="hh:mm:ss")  # -> [desc] 00:02:05

# алиасы: 's' (сек), 'm' (мин), 'h' (часы), 'hh:mm:ss', 'mm:ss'
t.start("foo")
t.stop("foo", format_="m")
```

## Декоратор exec_time

```python
from dgtimer import exec_time

@exec_time
def foo():
    pass

@exec_time(format_='hh:mm:ss', print_=True, desc='My process')
def long_process():
    ...
```
---

## Аргументы и форматы

- `format_` — формат вывода (**None**/`'s'`: секунды, `'m'`: минуты, `'h'`: часы, `'hh:mm:ss'`/`'mm:ss'`: форматированная строка)
- `print_` — печатает (`True`) или пишет в лог (`False`, через logger)
- `desc` — комментарий/отметка перед выводом
- Для декоратора: `@exec_time(format_='m', desc='step1')`

---

## Пример–main

```python
if __name__ == '__main__':
    t = Timer(desc="main")
    t.start("test_run")
    # ... вычисления ...
    t.stop("test_run", format_='m')
```

## Подключение dglog

Если установлен пакет `dglog`, логирование будет идти через него, иначе всегда через `logging`.

---

## Лицензия

MIT. Используйте в своих сервисах или пайплайнах без ограничений!

---