def result(self, timeout=None): """See future.Future.result for specification.""" with self._condition: if self._cancelled: raise future.CancelledError() if self._computed: if self._payload is None: raise self._exception # pylint: disable=raising-bad-type else: return self._payload condition = threading.Condition() def notify_condition(unused_future): with condition: condition.notify() self._callbacks.append(notify_condition) with condition: condition.wait(timeout=timeout) with self._condition: if self._cancelled: raise future.CancelledError() elif self._computed: if self._payload is None: raise self._exception # pylint: disable=raising-bad-type else: return self._payload else: raise future.TimeoutError()
def traceback(self, timeout=None): """See future.Future.traceback for specification.""" with self._condition: if self._cancelled: raise future.CancelledError() if self._computed: return self._traceback condition = threading.Condition() def notify_condition(unused_future): with condition: condition.notify() self._callbacks.append(notify_condition) with condition: condition.wait(timeout=timeout) with self._condition: if self._cancelled: raise future.CancelledError() elif self._computed: return self._traceback else: raise future.TimeoutError()
def exception(self, timeout=None): """See future.Future.exception for specification.""" with self._lock: if self._cancelled: raise future.CancelledError() elif self._computed: return self._exception condition = threading.Condition() def notify_condition(unused_future): with condition: condition.notify() self._waiting.append(notify_condition) with condition: condition.wait(timeout=timeout) with self._lock: if self._cancelled: raise future.CancelledError() elif self._computed: return self._exception else: raise future.TimeoutError()
def traceback(self, timeout=None): try: return self._future.traceback(timeout=timeout) except grpc.FutureTimeoutError: raise future.TimeoutError() except grpc.FutureCancelledError: raise future.CancelledError()
def exception(self, timeout=None): try: rpc_error_call = self._future.exception(timeout=timeout) return _abortion_error(rpc_error_call) except grpc.FutureTimeoutError: raise future.TimeoutError() except grpc.FutureCancelledError: raise future.CancelledError()
def result(self, timeout=None): try: return self._future.result(timeout=timeout) except grpc.RpcError as rpc_error_call: raise _abortion_error(rpc_error_call) except grpc.FutureTimeoutError: raise future.TimeoutError() except grpc.FutureCancelledError: raise future.CancelledError()
def result(self, timeout=None): until = None if timeout is None else time.time() + timeout with self._condition: while True: if self._termination.terminated: if self._termination.abortion is None: return self._up_payload elif self._termination.abortion.kind is face.Abortion.Kind.CANCELLED: raise future.CancelledError() else: raise self._termination.abortion_error # pylint: disable=raising-bad-type else: _wait_once_until(self._condition, until)
def _block(self, timeout): until = None if timeout is None else time.time() + timeout with self._condition: while True: if self._cancelled: raise future.CancelledError() elif self._matured: return else: if until is None: self._condition.wait() else: remaining = until - time.time() if remaining < 0: raise future.TimeoutError() else: self._condition.wait(timeout=remaining)
def next(self): with self._lock: if self._cancelled: raise future.CancelledError() return next(self._rendezvous)