def _convert_user_params_to_tasks(user_params, job): """ :param model.UserParameters.UserParameters user_params: UserParameters :param uuid.UUID job: uuid.UUID :return: model.Task.Task[] """ tasks = [] compute_parameters = ComputeParameters(user_params.num_samples, user_params.viscosity, user_params.speed, user_params.time, server_ip()) angles = numpy.arange(user_params.min_angle, user_params.max_angle, user_params.step) for angle in angles: model_parameters = ModelParameters(user_params.naca4, job, angle, user_params.num_nodes, user_params.refinement_level) task = Task(None, None, model_parameters, compute_parameters, None) tasks.append(task) model_parameters = ModelParameters(user_params.naca4, job, user_params.max_angle, user_params.num_nodes, user_params.refinement_level) task = Task(None, None, model_parameters, compute_parameters, None) tasks.append(task) return tasks
def create(self, task_number): self.name = "RW%s" % task_number entry_task = Task(0, [], []) exit_task = Task(task_number - 1, [], []) self.task_list.append(entry_task) surplus_task_num = task_number - 2 last_layer = [entry_task.task_id] max_id = 0 while surplus_task_num != 0: current_layer_task_num = random.randint(constant.MIN_TASK_NUM, constant.MAX_TASK_NUM) # 创建当层任务列表 current_layer_task_id_list = [] if current_layer_task_num > surplus_task_num: current_layer_task_num = surplus_task_num for i in range(0, current_layer_task_num): task = Task(max_id + 1, [], []) self.task_list.append(task) current_layer_task_id_list.append(task.task_id) max_id += 1 # 给上层任务随机添加后继任务 for task_id in last_layer: task = self.get_task_by_id(task_id) random_num = random.randint(0, current_layer_task_num - 1) task_id_temp = current_layer_task_id_list[random_num] task.suc_task_id_list.append(task_id_temp) task_temp = self.get_task_by_id(task_id_temp) task_temp.pre_task_id_list.append(task_id) # 判断当前层的任务是否都有前驱,如果没有,随机添加前驱任务 for task_id in current_layer_task_id_list: task = self.get_task_by_id(task_id) if task.pre_task_id_list is None or len(task.pre_task_id_list) == 0: random_num = random.randint(0, len(last_layer) - 1) task_id_temp = last_layer[random_num] task_temp = self.get_task_by_id(task_id_temp) task_temp.suc_task_id_list.append(task.task_id) task.pre_task_id_list.append(task_id_temp) surplus_task_num -= current_layer_task_num last_layer = current_layer_task_id_list for task_id in last_layer: task = self.get_task_by_id(task_id) task.suc_task_id_list.append(exit_task.task_id) exit_task.pre_task_id_list.append(task_id) self.task_list.append(exit_task)
def create_classic_wf(self, file_path): task_dict = dict() file = open(file_path, "r") line = file.readline() while line: # 首先去除换行符,真讨厌 line = line.strip('\n') # 以空格分割一行,分割后的每一项都是task_id line_split = line.split(" ") # 如果当前task任务不在task_key_value中,那么new一个task for task_id in line_split: if task_id not in task_dict.keys(): task = Task(task_id, [], []) task_dict[task_id] = task # 记录每一行的第一个task task = task_dict[line_split[0]] # 删除当前的task_id,那么剩余的line_split中的task都上它的后继 line_split.pop(0) for task_id in line_split: task_temp = task_dict[task_id] task_temp.pre_task_id_list.append(task.task_id) task.suc_task_id_list.append(task_id) line = file.readline() task_dict = WorkFlow.sort_dict_by_key(task_dict) # 最后按照int类型的key值进行排序 self.task_list = task_dict.values()
def put_task_in_queue(): """ route for new task :return: int id task """ new_idx = next(idx_gen) task = Task(new_idx) r_new_tasks.set(new_idx, pickle.dumps(task)) return str(new_idx)
def create_task_for_params(connection, name, state_id, user_id): state = connection.query(State).get(state_id) user = connection.query(User).get(user_id) task = Task(task_name=name, active_state=state, user=user) connection.add(task) connection.commit()