Skip to main content

supertimer

Contextmanager to print or log execution time of code blocks

Original url: https://github.com/mariushelf/supertimer

Etymology

This package provides a timer. But the name timer was already taken. So I needed a new name. Inspired by my recently freshly flamed up love for the good old Super Nintendo, I thought that this timer could as well be super.

Usage

Use as a context manager

To log the duration of a code block:

from supertimer import timer
import time

with timer("Sleeping a bit"):
    time.sleep(2)

This will log:

Sleeping a bit starting at 2020-12-14 18:34:54.403371
Sleeping a bit finished successfully at 2020-12-14 18:34:56.404208 after 0:00:02.000837.

Use as a decorator

from supertimer import timer
import time

@timer("Sleeping a bit")
def sleep_a_bit():
    time.sleep(2)

sleep_a_bit()

This will log the same message as the context manager each time the decorated function is called:

Sleeping a bit starting at 2020-12-14 18:34:54.403371
Sleeping a bit finished successfully at 2020-12-14 18:34:56.404208 after 0:00:02.000837.

Configuring the output method

By default, the output is logged at loglevel DEBUG.

The loglevel can be changed with the loglevel parameter. Printing to stdout can be activated by setting the print parameter to True. Logging can be disabled by setting log to False:

with timer(loglevel=logging.INFO):
    # logging at loglevel INFO, no printing
    ...
    
with timer(print=True, log=False):
    # just printing, no logging
    ...

Changing the logger

The logger can be configured:

import logging

logger = logging.getLogger("my.custom.logger")
with timer(logger=logger):
    do_something()

If no logger is provided, a logger named supertimer is used.

Convenience classes

There are convenience classes which are preconfigured for a certain loglevel or just printing:

  • print_timer
  • debug_timer
  • info_timer

Configuring defaults

All constructor arguments have a default_.* class attribute counterpart which specify defaults in case the arguments are omitted.

For example, to change the default loglevel to WARNING one could do:

timer.default_loglevel = logging.WARNING
with timer("Sleep warning"):
    # log timings with loglevel `WARNING`
    time.sleep(2)
    
with timer("Sleep debug", loglevel=logging.DEBUG):
    # log timings with loglevel `DEBUG`
    time.sleep(2)

How time is measured

By default, the start and end time are taken with datetime.dateime.now. The duration is calculated as the difference of start and end time, resulting in a datetime.timedelta object.

The timer function can be overridden:

import timeit

with timer(timer_func=timeit.default_timer):
    ...

The timer_func parameter expects a callable that returns a value which supports the minus operation when called without an argument.

License

MIT

Changelog

0.4.0

  • timer can now be used as a decorator
  • global default configuration
  • additional log parameter
  • documentation
  • change name of default logger to supertimer

0.3.0

  • convenience classes print_timer, debug_timer and info_timer
  • make timer function configurable

0.2.0

  • mention success or error after execution

0.1.0

  • First release

Author

Marius Helf (helfsmarius@gmail.com)

Metadata

Release files for supertimer 0.4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for supertimer 0.4.1
File Size Uploaded
supertimer-0.4.1.tar.gz 18.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for supertimer 0.4.1
File Interpreter ABI Platform
supertimer-0.4.1-py3-none-any.whl Python 3 none any Details

Total release size: 23.7 kB

Release files / supertimer-0.4.1.tar.gz

Download URL supertimer-0.4.1.tar.gz
Size 18.8 kB
Tags Source
SHA-256 checksum
How to use checksums
607d6557c2f785452257a290825bc01d10c6fabdd91dd6a4ebe429b09fcd7672
BLAKE2b-256 checksum
How to use checksums
a815dbf931e19060f3575c0467312690017b616af4ae008ec86a1db0cd786a6c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.9

Release files / supertimer-0.4.1-py3-none-any.whl

Download URL supertimer-0.4.1-py3-none-any.whl
Size 4.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
21ff1bf7040463dda46f10d8d1c540d4a5b6c6d258dbd5d0c686b748a582a405
BLAKE2b-256 checksum
How to use checksums
d89cf03bbb9e9425488fad63844ea8b35e5d88947d47a5c0f1bc87757f795629
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.9

Release history Release notifications | RSS feed

This release

0.4.1 This release

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page