def get_rqmt(self, task, task_id, update=True): """ Get the requirements submitted for this task :param sisyphus.task.Task task: :param int task_id: :param bool update: """ rqmt = task.rqmt() # find last requirements default_rqmt = self.add_defaults_to_rqmt(task, rqmt) r = self.get_submit_history(task)[task_id] if r: default_rqmt.update(r[-1]) if r and update: # previously submitted, update requirements rqmt = task.update_rqmt(default_rqmt, r, task_id) if 'mem' in rqmt: rqmt['mem'] = tools.str_to_GB(rqmt['mem']) for req in rqmt: if type(rqmt[req]) in { float, int }: # max also works for strings, but this is not desired rqmt[req] = max(rqmt[req], default_rqmt[req]) else: # never submitted so far, use default values rqmt = default_rqmt rqmt = gs.check_engine_limits(rqmt, task) if 'mem' in rqmt: rqmt['mem'] = tools.str_to_GB(rqmt['mem']) return rqmt
def rqmt(self): if callable(self._rqmt): rqmt = self._rqmt() else: rqmt = self._rqmt # Ensure that the requested memory is a float representing GB if 'mem' in rqmt: rqmt['mem'] = tools.str_to_GB(rqmt['mem']) if 'time' in rqmt: rqmt['time'] = tools.str_to_hours(rqmt['time']) return rqmt
def update_rqmt(self, initial_rqmt, submit_history, task_id): """ Update task requirements of interrupted job """ initial_rqmt = initial_rqmt.copy() initial_rqmt['mem'] = tools.str_to_GB(initial_rqmt['mem']) initial_rqmt['time'] = tools.str_to_hours(initial_rqmt['time']) usage_file = self._job._sis_path(gs.PLOGGING_FILE + '.' + self.name(), task_id, abspath=True) try: last_usage = literal_eval(open(usage_file).read()) except (SyntaxError, IOError): # we don't know anything if no usage file is writen or is invalid, just reuse last rqmts return initial_rqmt rresources = last_usage['requested_resources'] if 'mem' in rresources: rresources['mem'] = tools.str_to_GB(rresources['mem']) if 'time' in rresources: rresources['time'] = tools.str_to_hours(rresources['time']) new_rqmt = self._update_rqmt(initial_rqmt=initial_rqmt, last_usage=last_usage) new_rqmt = gs.check_engine_limits(new_rqmt, self) return new_rqmt