-
- from collections import namedtuple
- Obj = namedtuple("Obj", ["name", "has_something", "do_something", "dependencies"])
-
- class XObj(object):
- def __init__(self, name, has_something, do_something, dependencies):
- self.name = name
- self.has_something = has_something
- self.do_something = do_something
- self.dependencies = dependencies
-
- def one():
- obj = Obj("foo", 1, False, {"bar": Obj("bar", 0, False, None), "baz": Obj("baz", 1, False, None), "foo2": Obj("foo2", 1, True, None)})
- l = {"foo": obj}
- while l:
- k, x = l.popitem()
- if x.has_something:
- if not hasattr(x, 'has_something_else'):
- pass
- if x.dependencies:
- for v in x.dependencies.itervalues():
- l[v.name] = v
- if x.do_something:
- pass
-
- def three():
- Obj = XObj
- obj = Obj("foo", 1, False, None)
- l = {"foo": obj}
- obj.dependencies = {"bar": Obj("bar", 0, False, None), "baz": Obj("baz", 1, False, None), "foo2": Obj("foo2", 1, True, None)}
- while l:
- k, x = l.popitem()
- if x.has_something:
- if not hasattr(x, 'has_something_else'):
- pass
- if x.dependencies:
- for v in x.dependencies.itervalues():
- l[v.name] = v
- if x.do_something:
- pass
-
- has_something = dict.fromkeys(["something", "baz", "foo2", "foo"])
- has_something_else = dict.fromkeys(["has_something_else", "foo2"])
- do_something = dict.fromkeys(["do_something"])
-
- def two():
- l = {"foo": None}
- dependencies = {"foo": dict.fromkeys(["bar", "baz", "foo2"])}
- while l:
- k, _ = l.popitem()
- if k in has_something:
- if k not in has_something_else:
- pass
- if k in dependencies:
- for v in dependencies[k]:
- l[v] = None
- if k in do_something:
- pass
-
- import time
- tp = time.time()
- for i in range(1000000):
- three()
- t0 = time.time()
- for i in range(1000000):
- two()
- t1 = time.time()
- for i in range(1000000):
- one()
- t2 = time.time()
- print t2-t1, t1-t0, t0-tp
-