Skip to main content

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


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.4.tar.gz (16.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cheetiming-0.0.4-py3-none-any.whl (17.1 kB view details)

Uploaded Python 3

File details

Details for the file cheetiming-0.0.4.tar.gz.

File metadata

  • Download URL: cheetiming-0.0.4.tar.gz
  • Upload date:
  • Size: 16.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.7.7

File hashes

Hashes for cheetiming-0.0.4.tar.gz
Algorithm Hash digest
SHA256 00c80726675c3a0ba25555fdd819be202f0812e56a1946b7a8f49e246fa208af
MD5 cbdc14b60da567980ac2b9e0afcc864d
BLAKE2b-256 0f239fa9e666401d2af323620b20fa47af11a9d8b5e5128f196e9e452260c0eb

See more details on using hashes here.

File details

Details for the file cheetiming-0.0.4-py3-none-any.whl.

File metadata

  • Download URL: cheetiming-0.0.4-py3-none-any.whl
  • Upload date:
  • Size: 17.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.7.7

File hashes

Hashes for cheetiming-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 c917ad57300f5cec086fb721b440ae12106386eaa9c9ed79ade70a71daf4d227
MD5 d3fbe8762c0249b721b8c7a30944e206
BLAKE2b-256 e761cbffcd64224a5740f6aa3995a11ec5b2367c0adf59eac1e4aa00e59f0b63

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page