import time
# use to time functions
# timer = timewith('fancy thing')
# expensive_function()
# timer.checkpoint('done with something')
# prints something like:
# fancy thing done with something took 0.582462072372 seconds
# fancy thing done with something else took 1.75355315208 seconds
# fancy thing finished took 1.7535982132 seconds
class timewith():
def __init__(self, name=''):
self.name = name
self.start = time.time()
@property
def elapsed(self):
return time.time() - self.start
def checkpoint(self, name=''):
print '{timer} {checkpoint} took {elapsed} seconds'.format(
timer=self.name,
checkpoint=name,
elapsed=self.elapsed,
).strip()
def __enter__(self):
return self
def __exit__(self, type, value, traceback):
self.checkpoint('finished')
pass
# Use as decorator to see timing of functions
# @timefunc
# def expensive_function():
# for x in get_number():
# i = x ^ x ^ x
# return 'some result!'
# # prints "expensive_function took 0.72583088875 seconds"
# result = expensive_function()
def timefunc(f):
def f_timer(*args, **kwargs):
start = time.time()
result = f(*args, **kwargs)
end = time.time()
print f.__name__, 'took', end - start, 'time'
return result
return f_timer