'Return the result of the call that the future represents.
Parameters
timeout
The number of seconds to wait for the result if the future
isn\'t done. If None, then there is no limit on the wait time.
Returns
The result of the call that the future represents.
Raises
CancelledError
If the future was cancelled.
TimeoutError
If the future didn\'t finish executing before the given
timeout.
Exception
If the call raised then that exception will be raised.'

def result(self, timeout=None):

    with self._condition:
        if (self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]):
            raise CancelledError()
        elif (self._state == FINISHED):
            return self.__get_result()
        self._condition.wait(timeout)
        if (self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]):
            raise CancelledError()
        elif (self._state == FINISHED):
            return self.__get_result()
        else:
            raise TimeoutError()
