Skip to main content

A flexible, customizable timer for your Python code

Project description

Python Timer Functions: Three Ways to Monitor Your Code

codetiming - A flexible, customizable timer for your Python code

Latest version Python versions Code style: black Checked with mypy CircleCI

Install codetiming from PyPI:

$ python -m pip install codetiming

The source code is available at GitHub.

For a complete tutorial on how codetiming works, see Python Timer Functions: Three Ways to Monitor Your Code on Real Python.

Basic Usage

You can use codetiming.Timer in several different ways:

  1. As a class:

    t = Timer(name="class")
    t.start()
    # Do something
    t.stop()
    
  2. As a context manager:

    with Timer(name="context manager"):
        # Do something
    
  3. As a decorator:

    @Timer(name="decorator")
    def stuff():
        # Do something
    

Arguments

Timer accepts the following arguments when it's created, all are optional:

  • name: An optional name for your timer
  • text: The text shown when your timer ends. It should contain a {} placeholder that will be filled by the elapsed time in seconds (default: "Elapsed time: {:.4f} seconds")
  • logger: A function/callable that takes a string argument, and will report the elapsed time when the logger is stopped (default: print())

You can turn off explicit reporting of the elapsed time by setting logger=None.

In the template text, you can also use explicit attributes to refer to the name of the timer, or log the elapsed time in milliseconds, seconds (the default), or minutes. For example:

t1 = Timer(name="NamedTimer", text="{name}: {minutes:.1f} minutes")
t2 = Timer(text="Elapsed time: {milliseconds:.0f} ms")

Note that the strings used by text are not f-strings. Instead they are used as templates that will be populated using .format() behind the scenes. If you want to combine the text template with an f-string, you need to use double braces for the template values:

t = Timer(text=f"{__file__}: {{:.4f}}")

Capturing the Elapsed Time

When using Timer as a class, you can capture the elapsed time when calling .stop():

elapsed_time = t.stop()

You can also find the last measured elapsed time in the .last attribute. The following code will have the same effect as the previous example:

t.stop()
elapsed_time = t.last

Named Timers

Named timers are made available in the class dictionary Timer.timers. The elapsed time will accumulate if the same name or same timer is used several times. Consider the following example:

>>> import logging
>>> from codetiming import Timer

>>> t = Timer("example", text="Time spent: {:.2f}", logger=logging.warning)

>>> t.start()
>>> t.stop()
WARNING:root:Time spent: 3.58
3.5836678670002584

>>> with t:
...     _ = list(range(100000000))
... 
WARNING:root:Time spent: 1.73

>>> Timer.timers
{'example': 5.312697440000193}

The example shows how you can redirect the timer output to the logging module. Note that the elapsed time spent in the two different uses of t has been accumulated in Timer.timers.

You can also get simple statistics about your named timers. Continuing from the example above:

>>> Timer.timers.max("example")
3.5836678670002584

>>> Timer.timers.mean("example")
2.6563487200000964

>>> Timer.timers.stdev("example")
1.311427314335879

timers support .count(), .total(), .min(), .max(), .mean(), .median(), and .stdev().

Acknowledgements

codetiming is based on a similar module originally developed for the Midgard Geodesy library at the Norwegian Mapping Authority.

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

codetiming-1.2.0.tar.gz (10.3 kB view details)

Uploaded Source

Built Distribution

codetiming-1.2.0-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file codetiming-1.2.0.tar.gz.

File metadata

  • Download URL: codetiming-1.2.0.tar.gz
  • Upload date:
  • Size: 10.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.22.0

File hashes

Hashes for codetiming-1.2.0.tar.gz
Algorithm Hash digest
SHA256 bc0d19fedfc66c8f8ffd2245d2bd5ae88005ecff5f740a67c9cc776083db4a8e
MD5 8e11a79b248db96e01ef8af038fb35ef
BLAKE2b-256 92a5990e22c3f67e26db8e7dbbf58dc503748b7dca58ab2fda876fa69d30b04c

See more details on using hashes here.

File details

Details for the file codetiming-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: codetiming-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 10.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.22.0

File hashes

Hashes for codetiming-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9be79be7b109fbf85991ddd937208b011911dff8925e6259097a4f0f79f6a4ce
MD5 8af340ad0712d98b077a8fa3d2e95ea2
BLAKE2b-256 1487721c01bcfe079e88dd39318e24b1fe069aa7449e232d99722fd7a488ad45

See more details on using hashes here.

Supported by

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