[patch] 新增多实例测试开关控制流 逻辑

This commit is contained in:
kris 郝
2025-11-03 11:31:20 +08:00
parent 2083516b8c
commit 8a5da5e906
3 changed files with 195 additions and 149 deletions

View File

@@ -194,12 +194,19 @@ class WebSocketManager:
"""连接后端WebSocket"""
try:
# 1 保存token到配置
try:
from config import set_saved_token
set_saved_token(token)
except Exception:
pass
# 🔥 根据配置决定是否保存token
# 生产模式保存token方便用户下次自动加载
# 测试模式:不保存,避免多实例冲突
import config as cfg
if not cfg.is_multi_instance_mode():
try:
from config import set_saved_token
set_saved_token(token)
self._log("生产模式已保存token到配置文件", "INFO")
except Exception as e:
self._log(f"保存token失败: {e}", "WARNING")
else:
self._log("测试模式不保存token支持多实例运行", "INFO")
# 2 获取或创建后端客户端
backend = get_backend_client()

View File

@@ -45,6 +45,39 @@ WINDOW_TITLE = "AI回复连接入口-V1.0"
# 应用版本号(用于版本检查)
APP_VERSION = "1.5.66"
# 🔥 多实例运行模式开关
# - True: 测试模式多实例不保存token避免冲突
# - False: 生产模式单实例保存token自动加载
#
# 使用方法:
# 1. 修改此值MULTI_INSTANCE_MODE = False # 改为生产模式
# 2. 或设置环境变量SHUIDROP_MULTI_INSTANCE=0 # 临时切换到生产模式
MULTI_INSTANCE_MODE = True # 默认:测试模式
def is_multi_instance_mode() -> bool:
"""
检查是否为多实例模式(支持环境变量覆盖)
优先级:
1. 环境变量 SHUIDROP_MULTI_INSTANCE0=生产1=测试)
2. 配置文件 MULTI_INSTANCE_MODE
Returns:
bool: True=多实例模式False=单实例模式
"""
# 检查环境变量
env_value = os.getenv('SHUIDROP_MULTI_INSTANCE')
if env_value is not None:
# 0, false, False, no, No → 生产模式
if env_value.lower() in ('0', 'false', 'no'):
return False
# 1, true, True, yes, Yes → 测试模式
if env_value.lower() in ('1', 'true', 'yes'):
return True
# 使用配置文件值 (如果不做设置我们可以直接用编码变量进行控制是否可以允许多实例的方式运行)
return MULTI_INSTANCE_MODE
# 平台特定配置
PLATFORMS = {
"JD": {

22
main.py
View File

@@ -145,14 +145,20 @@ class LoginWindow(QMainWindow):
# noinspection PyUnresolvedReferences
self.token_input.returnPressed.connect(self.login) # 表示回车提交
self.token_input.setMinimumHeight(34) # 最小输入框高度
# 预填已保存的令牌(如果存在)
try:
from config import get_saved_token
saved = get_saved_token()
if saved:
self.token_input.setText(saved)
except Exception:
pass
# 🔥 根据配置决定是否自动加载token
# 生产模式自动加载保存的token方便用户
# 测试模式:不加载,避免多实例冲突
if not config.is_multi_instance_mode():
try:
from config import get_saved_token
saved = get_saved_token()
if saved:
self.token_input.setText(saved)
print("[INFO] 生产模式已自动加载保存的token")
except Exception:
pass
else:
print("[INFO] 测试模式不自动加载token支持多实例运行")
token_layout.addWidget(token_label)
token_layout.addWidget(self.token_input)