多个任务并发执行类
| 200 | |
| 201 | |
| 202 | class ConcurrentTasksRuner(TaskRunner): |
| 203 | """ |
| 204 | 多个任务并发执行类 |
| 205 | """ |
| 206 | def __init__(self, execute_request_list, env, job_web_url, proj_id): |
| 207 | """ |
| 208 | |
| 209 | :param execute_request_list: 任务执行参数列表 |
| 210 | :param env: task执行的环境变量 |
| 211 | :param job_web_url: |
| 212 | """ |
| 213 | TaskRunner.__init__(self) |
| 214 | self._execute_request_list = execute_request_list |
| 215 | self._env = env |
| 216 | self._job_web_url = job_web_url |
| 217 | self._proj_id = proj_id |
| 218 | self._task_limit = psutil.cpu_count() |
| 219 | self._no_build_task_requests = [] |
| 220 | self._build_task_requests = [] |
| 221 | self._build_task_names = [] |
| 222 | self._running_build_task = [] |
| 223 | self._finished_task_results = [] |
| 224 | self._err_code = 0 |
| 225 | self._err_msg = "" |
| 226 | |
| 227 | def _handle_exist_task(self): |
| 228 | """管理当前在执行的任务,如果任务结束,上传分析结果,并从self._running_task列表中删除 |
| 229 | :return: True - 任务成功; False - 有任务失败 |
| 230 | """ |
| 231 | task_succ = True |
| 232 | for task in self._running_task[:]: |
| 233 | if task.done: |
| 234 | LogPrinter.info(f'Task_{task.task_id} is done.') |
| 235 | # 从任务队列中删除 |
| 236 | self._running_task.remove(task) |
| 237 | if task.task_name in self._build_task_names: |
| 238 | self._running_build_task.remove(task) |
| 239 | |
| 240 | # 上传到文件服务器 |
| 241 | self._err_code, self._err_msg, log_url, data_url, execute_processes, node_task_version = ResultCheck.upload_task_result(task, self._proj_id) |
| 242 | # 判断任务是否失败 |
| 243 | self._err_code, self._err_msg, task_succ, task_result = ResultCheck.get_task_result(task, self._job_web_url, log_url, data_url) |
| 244 | self._finished_task_results.append(task_result) |
| 245 | if not task_succ: |
| 246 | break |
| 247 | |
| 248 | # 如果任务失败,把其他正在执行的任务都停止 |
| 249 | if not task_succ: |
| 250 | for task in self._running_task: |
| 251 | try: |
| 252 | task.terminate() |
| 253 | except Exception as err: |
| 254 | LogPrinter.warning(f"{str(err)}") |
| 255 | |
| 256 | return task_succ |
| 257 | |
| 258 | def _filter_build_tasks(self): |
| 259 | # 区分编译和非编译类工具任务 |
no outgoing calls
no test coverage detected