Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- Result:
- main->sub1 0.10152816772460938
- main->sub2 0.20150494575500488
- main 0.31107306480407715
- main2->sub1 0.30101609230041504
- main2->sub2 0.4036266803741455
- main2 0.7056293487548828
- """
- import inspect
- import time
- def get_caller():
- for s in inspect.stack():
- f = s.frame.f_globals.get(s.function)
- attr = getattr(f, '__trace__', None)
- if attr:
- return attr
- def trace(name):
- def real_trace(f):
- def wrapper(*a, **kw):
- start = time.time()
- caller = get_caller()
- try:
- return f(*a, **kw)
- finally:
- end = time.time()
- print(caller + "->" + name if caller else name, '\t', end - start)
- wrapper.__trace__ = name
- return wrapper
- return real_trace
- @trace("main")
- def main():
- sub1(0.1)
- sub2(0.2)
- @trace("main2")
- def main2():
- sub1(0.3)
- sub2(0.4)
- @trace("sub1")
- def sub1(n):
- time.sleep(n)
- @trace("sub2")
- def sub2(n):
- time.sleep(n)
- main()
- main2()
Add Comment
Please, Sign In to add comment