cleantimer

Track progress of long-running scripts, without cluttering your code with log statements.


Keywords
time, timer, progress
License
GPL-3.0
Install
pip install cleantimer==0.0.2

Documentation

cleantimer

Track progress of long-running scripts, without cluttering your code with log statements.

cleantimer is a minimal wrapper around a couple of my favorite packages for timing scripts - contexttimer and tqdm. It merges their most useful features in a clean API based simply on the way I've found I like to use them. Hopefully you find it simply useful. 😊

Installation

pip install cleantimer

Import:

from cleantimer import CTimer

Use cases

A basic timer with a message for what you're timing:

with CTimer("Waking up"):
    sleep(4)
Waking up (3:22PM)...done. (4.0s)

Print with varying precision:

with CTimer("Waking up", 3):
    sleep(4.123456)
Waking up (3:22PM)...done. (4.123s)

Sub-timers

with CTimer("Making breakfast") as timer:
    sleep(2)
    with timer.child("cooking eggs") as eggtimer:
        sleep(3)
    with timer.child("pouring juice"):
        sleep(1)
Making breakfast (3:22PM)...
    cooking eggs (3:22PM)...done. (3.0s)
    pouring juice (3:23PM)...done. (1.0s)
done. (6.0s)

Progress meter on a Pandas apply

df = pd.DataFrame({"A": list(range(10000))})
def times2(row): return row["A"] * 2

with CTimer("Computing doubles") as timer:
    df["2A"] = timer.progress_apply(df, times2)
Computing doubles (3:22PM)...
    : 100% ██████████████████████████ 10000/10000 [00:07<00:00, 135869it/s]
done. (7.4s)

Segmented progress meter

df = pd.DataFrame({"A": list(range(10000)), "type": [1]*5000 + [2]*5000})
def times2(row): return row["A"] * 2

with CTimer("Computing doubles") as timer:
    df["2A"] = timer.progress_apply(df, times2, split_col="type", message="part {}")
Computing doubles (3:22PM)...
    part 1: 100% ██████████████████████████ 5000/5000 [00:07<00:00, 135869it/s]
    part 2: 100% ██████████████████████████ 5000/5000 [00:07<00:00, 122854it/s]
done. (8.2s)