Пример #1
0
 def _init_futures(self):
     """Build futures for results and output; hook up callbacks"""
     if not self._children:
         for msg_id in self.msg_ids:
             future = self._client._futures.get(msg_id, None)
             if not future:
                 result = self._client.results.get(msg_id, _default)
                 # result resides in local cache, construct already-resolved Future
                 if result is not _default:
                     future = Future()
                     future.msg_id = msg_id
                     future.output = Future()
                     future.output.metadata = self.client.metadata[msg_id]
                     future.set_result(result)
                     future.output.set_result(None)
             if not future:
                 raise KeyError("No Future or result for msg_id: %s" % msg_id)
             self._children.append(future)
             
     self._result_future = multi_future(self._children)
     self._output_future = multi_future([self._result_future] + [
         f.output for f in self._children
     ])
     # on completion of my constituents, trigger my own resolution
     self._result_future.add_done_callback(self._resolve_result)
     self._output_future.add_done_callback(self._resolve_output)