The worker thread should call this if it was successful. Unlike normal 
        functions, which will return None if execution is allowed to fall off 
        the end, either set_result() or self_error() must be called, or the 
        the get()ing side will hang.

def set_result(self, res):
        """
        The worker thread should call this if it was successful. Unlike normal 
        functions, which will return None if execution is allowed to fall off 
        the end, either set_result() or self_error() must be called, or the 
        the get()ing side will hang.
        """
        self.result = (True, res)
        self._lock.release()