Rather than allowing unmanaged exceptions to explode, or raising errors 
        within thread, the worker thread should call this function with an 
        error class or instance.

def set_error(self, e):
        """
        Rather than allowing unmanaged exceptions to explode, or raising errors 
        within thread, the worker thread should call this function with an 
        error class or instance.
        """
        self.result = (False, e)
        self._lock.release()