def finished(self):
        ''' A method that will check if this Task has finished executing,
            and check to ensure that execution was succesfull. If this Task
            hasn't been started and hasn't been skipped, it will return false.
            Otherwise, this method will query the subproccess created by
            self.start(). If the subprocess is still runnning, this method
            will return False. If the subprocess has set its exit code, the
            exit code will be checked by self.error_check, then this method
            will check to make sure that all targets of this task were
            created. If all checks are passed, self.finished will return True.
            In the event that execution of this task fails for some reason,
            all targets will be renamed to be [t+'.partial' for t in targets]
            to indicate that the output is unlikely to be complete.
        '''
        if(self.soft_finished_status):
            return True
        if(self.process is None):
            return False
        self.process.poll()
        exit_code = self.process.returncode
        if(exit_code is None):
            cur_run_time = float(time.time() - self.start_time) / 60
            if(cur_run_time > self.max_wall_time):
                err_mess = ('Task {0!s} has been running for greater than its maximum wall time, '
                            '{1!s}m, and has been aborted. This is likely an external error and '
                            'trying again is recommended.').format(self.name, self.max_wall_time)
                self.killRun()
                raise self.TaskException(err_mess)
            return False