looprunner主函数
(self)
| 156 | include_paths.append(format_scan_path) |
| 157 | |
| 158 | def run(self): |
| 159 | """looprunner主函数""" |
| 160 | # 向server注册节点 |
| 161 | NodeMgr().register_node(self._server, self._tag, self._org_sid, self._create_from) |
| 162 | |
| 163 | # 启动心跳上报线程 |
| 164 | HeartBeat(self._server).start() |
| 165 | |
| 166 | # 启动机器状态上报线程 |
| 167 | NodeStatusMonitor(self._server).start() |
| 168 | |
| 169 | # 启动轮询获取任务,执行分析 |
| 170 | LogPrinter.info("task loop is started.") |
| 171 | |
| 172 | while True: |
| 173 | try: |
| 174 | # 管理在执行的任务 |
| 175 | self._handle_exist_task() |
| 176 | except: |
| 177 | LogPrinter.exception("_handle_exist_task error, skip and continue ...") |
| 178 | |
| 179 | try: |
| 180 | # 获取任务 |
| 181 | if self._running_task: # 有任务在跑,不空闲 |
| 182 | node_is_free = False |
| 183 | else: # 任务队列为空,空闲 |
| 184 | node_is_free = True |
| 185 | task_request = self._server.get_task(node_is_free) |
| 186 | if not task_request: |
| 187 | # 获取不到任务,休息一段时间再继续获取 |
| 188 | time.sleep(self._get_task_interval) |
| 189 | continue |
| 190 | |
| 191 | if ('task_params' not in task_request) or (task_request['task_params'] is None): |
| 192 | LogPrinter.exception("task_params not exists or is null!\ntask_request: %s" % json.dumps(task_request, indent=2)) |
| 193 | LogPrinter.info("reset task_params to empty dict.") |
| 194 | task_request['task_params'] = {} |
| 195 | task_params = task_request.get('task_params', {}) |
| 196 | task_name = task_request.get('task_name') |
| 197 | job_id = task_request.get('job') |
| 198 | task_version = task_request.get("task_version") |
| 199 | |
| 200 | # kill task任务中,task_request没有id字段,需要从task_params中获取 |
| 201 | if task_name == '_kill_task': |
| 202 | task_id = task_params.get("task_id") |
| 203 | else: |
| 204 | task_id = task_request.get('id') |
| 205 | |
| 206 | LogPrinter.info("node is free: %s, get task: name=%s, id=%d, task_version=%s" % (node_is_free, task_name, task_id, task_version)) |
| 207 | |
| 208 | # 获取到kill_task任务 |
| 209 | # kill_task任务参数 {'task_name': '_kill_task', 'task_id':0, 'task_params':{'task_id': xxx}} |
| 210 | if task_name == '_kill_task': |
| 211 | kill_task_id = task_params['task_id'] |
| 212 | # kill task时进程如果已不存在,会报异常: ProcessLookupError: [Errno 3] No such process |
| 213 | self._terminate_task(kill_task_id) |
| 214 | # 等待一段时间后再接下一个任务 |
| 215 | time.sleep(self._get_task_interval) |
nothing calls this directly
no test coverage detected