MCPcopy Index your code
hub / github.com/Tencent/CodeAnalysis / run

Method run

client/node/servertask/looprunner.py:158–261  ·  view source on GitHub ↗

looprunner主函数

(self)

Source from the content-addressed store, hash-verified

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)

Callers

nothing calls this directly

Calls 15

_handle_exist_taskMethod · 0.95
_terminate_taskMethod · 0.95
_modify_include_pathsMethod · 0.95
startMethod · 0.95
NodeMgrClass · 0.90
HeartBeatClass · 0.90
NodeStatusMonitorClass · 0.90
TaskDirCtlClass · 0.90
TaskClass · 0.90
exceptionMethod · 0.80
get_taskMethod · 0.80
confirm_taskMethod · 0.80

Tested by

no test coverage detected