Small optimisation to CacheListDescriptor

erikj/timings
Erik Johnston 2016-06-02 11:52:32 +01:00
parent 266eb3bf26
commit 105f17ff4a
2 changed files with 11 additions and 2 deletions

View File

@ -102,6 +102,15 @@ class ObservableDeferred(object):
def observers(self):
return self._observers
def has_called(self):
return self._result is not None
def has_succeeded(self):
return self._result is not None and self._result[0] is True
def get_result(self):
return self._result[1]
def __getattr__(self, name):
return getattr(self._deferred, name)

View File

@ -321,12 +321,12 @@ class CacheListDescriptor(object):
try:
res = cache.get(tuple(key))
if not res.called:
if not res.has_succeeded():
res = res.observe()
res.addCallback(lambda r, arg: (arg, r), arg)
cached_defers[arg] = res
else:
results[arg] = res.result
results[arg] = res.get_result()
except KeyError:
missing.append(arg)