def skipable(self):
        ''' Method uses by Supervisor objects to determine if this task needs
            to be executed. This method will return True if this task is
            skippable and so does not need to be executed. A task is skippable
            if and only if all dependencies are satisfied, all dependencies
            have been skippable, and all targets exist.
        '''
        if(self.exit_code is not None):
            return False
        if(self.soft_finished_status):
            return True
        for t in self.dependencies:
            if(isinstance(t, Task) or isinstance(t, Supervisor)):
                if(not t.skipable()):
                    return False
        if(self.targets == []):
            return False
        for t in self.targets:
            if(not os.path.exists(t)):
                return False
        self.soft_finished_status = True
        return True