spacepaste

  1.  
  2. from collections import namedtuple
  3. Obj = namedtuple("Obj", ["name", "has_something", "do_something", "dependencies"])
  4. class XObj(object):
  5. def __init__(self, name, has_something, do_something, dependencies):
  6. self.name = name
  7. self.has_something = has_something
  8. self.do_something = do_something
  9. self.dependencies = dependencies
  10. def one():
  11. obj = Obj("foo", 1, False, {"bar": Obj("bar", 0, False, None), "baz": Obj("baz", 1, False, None), "foo2": Obj("foo2", 1, True, None)})
  12. l = {"foo": obj}
  13. while l:
  14. k, x = l.popitem()
  15. if x.has_something:
  16. if not hasattr(x, 'has_something_else'):
  17. pass
  18. if x.dependencies:
  19. for v in x.dependencies.itervalues():
  20. l[v.name] = v
  21. if x.do_something:
  22. pass
  23. def three():
  24. Obj = XObj
  25. obj = Obj("foo", 1, False, None)
  26. l = {"foo": obj}
  27. obj.dependencies = {"bar": Obj("bar", 0, False, None), "baz": Obj("baz", 1, False, None), "foo2": Obj("foo2", 1, True, None)}
  28. while l:
  29. k, x = l.popitem()
  30. if x.has_something:
  31. if not hasattr(x, 'has_something_else'):
  32. pass
  33. if x.dependencies:
  34. for v in x.dependencies.itervalues():
  35. l[v.name] = v
  36. if x.do_something:
  37. pass
  38. has_something = dict.fromkeys(["something", "baz", "foo2", "foo"])
  39. has_something_else = dict.fromkeys(["has_something_else", "foo2"])
  40. do_something = dict.fromkeys(["do_something"])
  41. def two():
  42. l = {"foo": None}
  43. dependencies = {"foo": dict.fromkeys(["bar", "baz", "foo2"])}
  44. while l:
  45. k, _ = l.popitem()
  46. if k in has_something:
  47. if k not in has_something_else:
  48. pass
  49. if k in dependencies:
  50. for v in dependencies[k]:
  51. l[v] = None
  52. if k in do_something:
  53. pass
  54. import time
  55. tp = time.time()
  56. for i in range(1000000):
  57. three()
  58. t0 = time.time()
  59. for i in range(1000000):
  60. two()
  61. t1 = time.time()
  62. for i in range(1000000):
  63. one()
  64. t2 = time.time()
  65. print t2-t1, t1-t0, t0-tp
  66.