diff --git a/apps/common/process_handler.py b/apps/common/process_handler.py index 8083a7dac93991923c01f151fe748d3185869d23..871945b756a0eac25c472ce2ad16fa756ae068dc 100644 --- a/apps/common/process_handler.py +++ b/apps/common/process_handler.py @@ -40,9 +40,9 @@ class ProcessHandler: if not acquired: logger.warning("[ProcessHandler] 获取任务ID时锁超时。") return [] - taks_ids = list(ProcessHandler.tasks.keys()) + task_ids = list(ProcessHandler.tasks.keys()) ProcessHandler.lock.release() - return taks_ids + return task_ids @staticmethod def clear_finished_tasks() -> None: diff --git a/apps/scheduler/pool/loader/mcp.py b/apps/scheduler/pool/loader/mcp.py index 7fc51cd12c0e2eb043a260364025d6ece1af1565..578686727352bc8dfb9794c654c836182e5380dd 100644 --- a/apps/scheduler/pool/loader/mcp.py +++ b/apps/scheduler/pool/loader/mcp.py @@ -132,13 +132,21 @@ class MCPLoader(metaclass=SingletonMeta): :param MCPServerConfig config: MCP配置 :return: 无 """ + # 删除已经完成或者是失败的MCP安装任务 + mcp_collection = MongoDB().get_collection("mcp") + mcp_ids = ProcessHandler.get_all_task_ids() + db_service_list = await mcp_collection.find( + {"_id": {"$in": mcp_ids}, "status": {"$in": [MCPInstallStatus.READY.value, MCPInstallStatus.FAILED.value]}}, + ).to_list(None) + for db_service in db_service_list: + db_service = MCPCollection.model_validate(db_service) + ProcessHandler.remove_task(db_service.id) # 插入数据库;这里用旧的config就可以 await MCPLoader._insert_template_db(mcp_id, config) # 检查目录 template_path = MCP_PATH / "template" / mcp_id await Path.mkdir(template_path, parents=True, exist_ok=True) - ProcessHandler.clear_finished_tasks() # 安装MCP模板 if not ProcessHandler.add_task(mcp_id, MCPLoader._install_template_task, mcp_id, config): err = f"安装任务无法执行,请稍后重试: {mcp_id}"