Skip to content

Instantly share code, notes, and snippets.

@rshk
Created May 9, 2013 14:14
Show Gist options
  • Save rshk/5547676 to your computer and use it in GitHub Desktop.
Save rshk/5547676 to your computer and use it in GitHub Desktop.
Timing context
from collections import OrderedDict
class TimerContext(object):
def __init__(self, name, callback):
self._name = name
self._callback = callback
self._start = None
def __enter__(self):
self._start = time.time()
def __exit__(self, *ignored):
elapsed = time.time() - self._start
self._callback(self._name, elapsed)
class MultiTimer(object):
def __init__(self):
self.timers = OrderedDict()
def __getitem__(self, name):
self.timers[name] = None # for OrderedDict order..
return TimerContext(name, self.__setitem__)
def __setitem__(self, name, value):
self.timers[name] = value
## Example usage:
timer = MultiTimer()
with timer["my_timer"]:
do_something()
with timer["my_timer2"]:
for x in xrange(100000):
do_something_else()
print "----"
for key, value in timer.timers.iteritems():
print "{}: {:.3f}".format(key, value)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment