Source code for ajenti.profiler

import time

_profiles = {}
_profiles_running = {}
_profiles_stack = []


[docs]def profile_start(name): """ Starts a profiling interval with specific ``name`` Profiling data is sent to the client with next data batch. """ _profiles_running[name] = time.time() _profiles_stack.append(name)
[docs]def profile_end(name=None): """ Ends a profiling interval with specific ``name`` """ last_name = _profiles_stack.pop() name = name or last_name if not name in _profiles: _profiles[name] = 0.0 _profiles[name] += time.time() - _profiles_running[name]
[docs]def get_profiles(): """ Returns all accumulated profiling values """ global _profiles r = _profiles _profiles = {} return r
[docs]def profiled(namefx=None): def decorator(fx): def wrapper(*args, **kwargs): if namefx: profile_start(namefx(args, kwargs)) else: profile_start('%s %s %s' % (fx.__name__, args, kwargs)) r = fx(*args, **kwargs) profile_end() return r return wrapper return decorator
comments powered by Disqus