diff --git a/funasr_server.py b/funasr_server.py index 78b1863..11640b1 100644 --- a/funasr_server.py +++ b/funasr_server.py @@ -55,13 +55,13 @@ def get_log_path(): @contextlib.contextmanager def suppress_stdout(): """上下文管理器:临时重定向stdout到devnull,避免FunASR库的非JSON输出干扰IPC通信""" - old_stdout = sys.stdout devnull = open(os.devnull, "w") try: sys.stdout = devnull yield finally: - sys.stdout = old_stdout + # 使用 sys.__stdout__ 恢复原始stdout,避免多线程race condition + sys.stdout = sys.__stdout__ devnull.close() diff --git a/src/helpers/funasrManager.js b/src/helpers/funasrManager.js index e964085..d21eb96 100644 --- a/src/helpers/funasrManager.js +++ b/src/helpers/funasrManager.js @@ -1231,7 +1231,7 @@ class FunASRManager { installed: installStatus.installed, models_downloaded: modelStatus.models_downloaded, missing_models: modelStatus.missing_models || [], - initializing: this.initializationPromise !== null + initializing: this.initializationPromise !== null || !this.isInitialized }; } } catch (error) { diff --git a/src/hooks/useModelStatus.js b/src/hooks/useModelStatus.js index 728a8fc..b7afbd3 100644 --- a/src/hooks/useModelStatus.js +++ b/src/hooks/useModelStatus.js @@ -105,8 +105,8 @@ export const useModelStatus = () => { progress: 100, stage: 'ready' })); - } else if (serverStatus.initializing) { - // 模型已下载,正在加载 + } else if (serverStatus.initializing || serverStatus.models_downloaded) { + // 模型已下载,正在加载(包括启动竞争窗口期 initializing 尚未设置的情况) setModelStatus(prev => ({ ...prev, isLoading: true, @@ -118,12 +118,12 @@ export const useModelStatus = () => { stage: 'loading' })); } else { - // 模型已下载但服务器未就绪 + // 模型未下载或服务器真实失败 setModelStatus(prev => ({ ...prev, isLoading: false, isReady: false, - modelsDownloaded: true, + modelsDownloaded: false, missingModels: [], error: serverStatus.error || '服务器未就绪', progress: 0,