feat: 添加ComfyUI服务器管理功能,重构相关代码以支持动态注册和状态监控,增强系统的可扩展性和可维护性

This commit is contained in:
iHeyTang
2025-08-14 15:52:20 +08:00
parent 9c72bffd21
commit a475a87165
10 changed files with 1019 additions and 168 deletions

View File

@@ -12,7 +12,8 @@ import aiohttp
from aiohttp import ClientTimeout
from workflow_service.comfy.comfy_workflow import build_prompt
from workflow_service.config import Settings, ComfyUIServer
from workflow_service.config import Settings
from workflow_service.comfy.comfy_server import server_manager, ComfyUIServerInfo
from workflow_service.database.api import (
create_workflow_run,
update_workflow_run_status,
@@ -105,6 +106,9 @@ class WorkflowQueueManager:
workflow_run_id = self.pending_tasks.pop(0)
server = available_servers[0]
# 分配服务器资源
await server_manager.allocate_server(server.name)
# 标记任务为运行中
await update_workflow_run_status(
workflow_run_id, "running", server.http_url
@@ -112,28 +116,21 @@ class WorkflowQueueManager:
self.running_tasks[server.http_url] = {
"workflow_run_id": workflow_run_id,
"started_at": datetime.now(),
"server_name": server.name,
}
# 启动任务执行
asyncio.create_task(self._execute_task(workflow_run_id, server))
async def _get_available_servers(self) -> list[ComfyUIServer]:
async def _get_available_servers(self) -> list[ComfyUIServerInfo]:
"""获取可用的服务器"""
available_servers = []
for server in settings.SERVERS:
if server.http_url not in self.running_tasks:
# 检查服务器状态
try:
async with aiohttp.ClientSession() as session:
status = await self.get_server_status(server, session)
if status["is_reachable"] and status["is_free"]:
available_servers.append(server)
except Exception as e:
logger.warning(f"检查服务器 {server.http_url} 状态时出错: {e}")
# 使用新的服务器管理器获取可用服务器
available_server = await server_manager.get_available_server()
if available_server:
return [available_server]
return []
return available_servers
async def _execute_task(self, workflow_run_id: str, server: ComfyUIServer):
async def _execute_task(self, workflow_run_id: str, server: ComfyUIServerInfo):
"""执行任务"""
cleanup_paths = []
try:
@@ -179,6 +176,9 @@ class WorkflowQueueManager:
async with self.lock:
if server.http_url in self.running_tasks:
del self.running_tasks[server.http_url]
# 释放服务器资源
await server_manager.release_server(server.name)
# 继续处理队列
asyncio.create_task(self._process_queue())
@@ -211,7 +211,7 @@ class WorkflowQueueManager:
return result
async def get_server_status(
self, server: ComfyUIServer, session: aiohttp.ClientSession
self, server: ComfyUIServerInfo, session: aiohttp.ClientSession
) -> dict[str, Any]:
"""
检查单个ComfyUI服务器的详细状态。
@@ -256,7 +256,7 @@ async def _execute_prompt_on_server(
workflow_data: dict,
api_spec: dict,
request_data: dict,
server: ComfyUIServer,
server: ComfyUIServerInfo,
workflow_run_id: str,
) -> dict:
"""