示例#1
0
    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()
示例#2
0
    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()
示例#3
0
    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()
示例#5
0
 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()
示例#7
0
 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)
示例#8
0
 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)
示例#9
0
 def next(self):
     with self._lock:
         if self._cancelled:
             raise future.CancelledError()
     return next(self._rendezvous)