Guest User

Untitled

a guest
Apr 22nd, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.02 KB | None | 0 0
  1. """
  2. Result:
  3. main->sub1 0.10152816772460938
  4. main->sub2 0.20150494575500488
  5. main 0.31107306480407715
  6. main2->sub1 0.30101609230041504
  7. main2->sub2 0.4036266803741455
  8. main2 0.7056293487548828
  9. """
  10.  
  11. import inspect
  12. import time
  13.  
  14. def get_caller():
  15. for s in inspect.stack():
  16. f = s.frame.f_globals.get(s.function)
  17. attr = getattr(f, '__trace__', None)
  18. if attr:
  19. return attr
  20.  
  21. def trace(name):
  22. def real_trace(f):
  23. def wrapper(*a, **kw):
  24. start = time.time()
  25. caller = get_caller()
  26. try:
  27. return f(*a, **kw)
  28. finally:
  29. end = time.time()
  30. print(caller + "->" + name if caller else name, '\t', end - start)
  31. wrapper.__trace__ = name
  32. return wrapper
  33. return real_trace
  34.  
  35. @trace("main")
  36. def main():
  37. sub1(0.1)
  38. sub2(0.2)
  39.  
  40. @trace("main2")
  41. def main2():
  42. sub1(0.3)
  43. sub2(0.4)
  44.  
  45. @trace("sub1")
  46. def sub1(n):
  47. time.sleep(n)
  48.  
  49. @trace("sub2")
  50. def sub2(n):
  51. time.sleep(n)
  52.  
  53. main()
  54. main2()
Add Comment
Please, Sign In to add comment