A package for timing with zero overhead
Project description
Usage
- Using as a context manager:
import time
from cheetiming import timing
with timing() as t:
time.sleep(.1)
print(t)
print(t.elapsed)
Output:
Timer: (Unnamed), 1 call(s), 0.1137937 seconds
0.1137937
- Using as a named context manager:
import time
from cheetiming import timing
with timing('my_named_code_block') as t:
time.sleep(.1)
print(t)
print(t.name, t.elapsed)
Output:
Timer: my_named_code_block, 1 call(s), 0.10922489999999999 seconds
my_named_code_block 0.10922489999999999
- Reusing a named context manager:
import time
from cheetiming import timing, timing_report
with timing('my_repeating_code_block') as t:
time.sleep(.1)
print(t)
with timing('my_repeating_code_block') as t:
time.sleep(.1)
print(t)
# print timing_report:
print(timing_report(t.name))
Output:
Timer: my_repeating_code_block, 1 call(s), 0.10937360000000002 seconds
Timer: my_repeating_code_block, 1 call(s), 0.10943849999999994 seconds
my_repeating_code_block:
1: 1 call(s), 0.10937360000000002 seconds
2: 1 call(s), 0.10943849999999994 seconds
total: 2 call(s), 0.21881209999999995 seconds
- Using in a for loop
from cheetiming import iterate_with_timer, timing_session
my_list = [2, 4, 6, 7]
for i, item in iterate_with_timer(my_list):
print(f'loop {i}: retrieving item:{item}')
print(timing_session)
print(timing_session.calls, 'calls', timing_session.elapsed, 'sec')
Output:
loop 0: retrieving item:2
loop 1: retrieving item:4
loop 2: retrieving item:6
loop 3: retrieving item:7
Timer: (Unnamed), 4 call(s), 1.2699999999976619e-05 seconds
4 calls 1.2699999999976619e-05 sec
- Using in a named for loop
from cheetiming import iterate_with_timer, timing_session, timing_report
my_list = [2, 4, 6, 7]
for i, item in iterate_with_timer(my_list, 'my_loop_timer'):
print(f'loop {i}: retrieving item:{item}')
print(timing_session)
print(timing_report('my_loop_timer'))
Output:
loop 0: retrieving item:2
loop 1: retrieving item:4
loop 2: retrieving item:6
loop 3: retrieving item:7
Timer: my_loop_timer, 4 call(s), 1.0599999999971743e-05 seconds
my_loop_timer:
1: 4 call(s), 1.0599999999971743e-05 seconds
total: 4 call(s), 1.0599999999971743e-05 seconds
- Using as a range -like generator loop to repeat a code block n times
from cheetiming import range_with_timer, timing_session
for i in range_with_timer(5):
print(f'loop {i}')
print(timing_session)
print(timing_session.calls, 'calls', timing_session.elapsed, 'sec')
Output:
loop 0
loop 1
loop 2
loop 3
loop 4
Timer: (Unnamed), 5 call(s), 1.3299999999993872e-05 seconds
5 calls 1.3299999999993872e-05 sec
- Using as a named range -like generator loop to repeat a code block n times
from cheetiming import range_with_timer, timing_session, timing_report
for i in range_with_timer(5, 'my_range_timer'):
print(f'loop {i}')
print(timing_session)
print(timing_report('my_range_timer'))
Output:
loop 0
loop 1
loop 2
loop 3
loop 4
Timer: my_range_timer, 5 call(s), 1.2099999999959365e-05 seconds
my_range_timer:
1: 5 call(s), 1.2099999999959365e-05 seconds
total: 5 call(s), 1.2099999999959365e-05 seconds
- Using as a pseudo- range -like generator loop to run a code block only once (it brings lower overhead than using a context manager)
from cheetiming import run_with_timer, timing_session
for _ in run_with_timer():
print('running my code block only once!')
print(timing_session)
Output:
running my code block only once!
Timer: (Unnamed), 1 call(s), 6.300000000014627e-06 seconds
- Using as a named pseudo- range -like generator loop to run a code block only once (it brings lower overhead than using a context manager)
from cheetiming import run_with_timer, timing_session, timing_report
for _ in run_with_timer('my_pseudo_range_timer'):
print('running my code block only once!')
print(timing_session)
print(timing_report('my_pseudo_range_timer'))
Output:
running my code block only once!
Timer: my_pseudo_range_timer, 1 call(s), 4.600000000021254e-06 seconds
my_pseudo_range_timer:
1: 1 call(s), 4.600000000021254e-06 seconds
total: 1 call(s), 4.600000000021254e-06 seconds
- Using timing_report to print statistics for all named timers
from cheetiming import timing_report
# using named timers from the examples above here ...
print(timing_report())
Output:
my_named_code_block:
1: 1 call(s), 0.10922489999999999 seconds
total: 1 call(s), 0.10922489999999999 seconds
my_repeating_code_block:
1: 1 call(s), 0.10937360000000002 seconds
2: 1 call(s), 0.10943849999999994 seconds
total: 2 call(s), 0.21881209999999995 seconds
my_loop_timer:
1: 4 call(s), 1.0599999999971743e-05 seconds
total: 4 call(s), 1.0599999999971743e-05 seconds
my_range_timer:
1: 5 call(s), 1.2099999999959365e-05 seconds
total: 5 call(s), 1.2099999999959365e-05 seconds
my_pseudo_range_timer:
1: 1 call(s), 4.600000000021254e-06 seconds
total: 1 call(s), 4.600000000021254e-06 seconds
- Printing a specific timer's report
from cheetiming import timing_report
# using named timers from the examples above here ...
print(timing_report('my_repeating_code_block'))
Output:
my_repeating_code_block:
1: 1 call(s), 0.10937360000000002 seconds
2: 1 call(s), 0.10943849999999994 seconds
total: 2 call(s), 0.21881209999999995 seconds
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
cheetiming-0.0.1.tar.gz
(16.5 kB
view hashes)
Built Distribution
cheetiming-0.0.1-py3-none-any.whl
(17.1 kB
view hashes)
Close
Hashes for cheetiming-0.0.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5728ba05b1cd3ceeb211d046adb1e34fb9e34c513b466728a2021f44e2d9a66f |
|
MD5 | adb2b10a989c2f36514337715b23d6b3 |
|
BLAKE2b-256 | 5614d4ea0affebc5488940df609ac27e4ddfc950b728d35e298ceabb766fc004 |