123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- # -*- coding: UTF-8 -*-
- import time, functools
- from collections import defaultdict
- import logging
- logger = logging.getLogger(__name__)
- class TotalTimer(object):
- def __init__(self):
- self.times = defaultdict(float)
- def add(self, name, t):
- self.times[name] += t
- def reset(self):
- self.times = defaultdict(float)
- def __del__(self):
- for k, v in self.times.items():
- logger.info("{} took {} seconds in total.".format(k, v))
- _total_timer = TotalTimer()
- class timing(object):
- def __init__(self, total=False):
- self.total = total
- def __call__(self, func):
- @functools.wraps(func)
- def wrapper(*args, **kwargs):
- start_time = time.time()
- ret = func(*args, **kwargs)
- duration = time.time() - start_time
- if hasattr(func, '__name__'):
- func_name = func.__name__
- else:
- func_name = 'function in module {}'.format(func.__module__)
- if self.total:
- _total_timer.add(func_name, duration)
- else:
- logger.info('Duration for `{}\': {}'.format(
- func_name, duration))
- return ret
- return wrapper
|