feat: 添加ComfyUI服务器管理功能,重构相关代码以支持动态注册和状态监控,增强系统的可扩展性和可维护性
This commit is contained in:
@@ -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:
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user