def updateResultsForJob(self, forceUpdate=True):
updateInterval = time.time() - self._lastUpdateAttemptTime<EOL>if updateInterval < self._MIN_UPDATE_INTERVAL and not forceUpdate:<EOL><INDENT>return<EOL><DEDENT>self.logger.info("<STR_LIT>""<STR_LIT>"%(self._jobID,<EOL>time.time(),<EOL>self._lastUpdateAttemptTime))<EOL>timestampUpdated = self._cjDB.jobUpdateSelectionSweep(self._jobID,<EOL>self._MIN_UPDATE_INTERVAL)<EOL>if not timestampUpdated:<EOL><INDENT>self.logger.info("<STR_LIT>""<STR_LIT>"%(self._jobID, self._lastUpdateAttemptTime))<EOL>if not forceUpdate:<EOL><INDENT>return<EOL><DEDENT><DEDENT>self._lastUpdateAttemptTime = time.time()<EOL>self.logger.info("<STR_LIT>"%(self._jobID, self._lastUpdateAttemptTime))<EOL>minUpdateRecords = self._MIN_UPDATE_THRESHOLD<EOL>jobResults = self._getJobResults()<EOL>if forceUpdate or jobResults is None:<EOL><INDENT>minUpdateRecords = <NUM_LIT:0><EOL><DEDENT>candidateIDs, bestMetric = self._cjDB.modelsGetCandidates(self._jobID, minUpdateRecords)<EOL>self.logger.info("<STR_LIT>"%(candidateIDs, bestMetric, self._jobID))<EOL>if len(candidateIDs) == <NUM_LIT:0>:<EOL><INDENT>return<EOL><DEDENT>self._jobUpdateCandidate(candidateIDs[<NUM_LIT:0>], bestMetric, results=jobResults)<EOL>
Chooses the best model for a given job.

        Parameters
        -----------------------------------------------------------------------
        forceUpdate:  (True/False). If True, the update will ignore all the
                      restrictions on the minimum time to update and the minimum
                      number of records to update. This should typically only be
                      set to true if the model has completed running