From 3c8f84368396ecf9ca715f4afe137134f78685c1 Mon Sep 17 00:00:00 2001 From: Lxy Date: Sat, 14 Mar 2026 21:11:30 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E5=88=9B=E5=BB=BAamazingdata=E5=AF=B9=E8=B1=A1=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter_service.cpython-311.pyc | Bin 14030 -> 15272 bytes app/services/adapter_service.py | 68 ++++++++++++------ 2 files changed, 48 insertions(+), 20 deletions(-) diff --git a/app/services/__pycache__/adapter_service.cpython-311.pyc b/app/services/__pycache__/adapter_service.cpython-311.pyc index 95292a2ea2c527a8e98aa5e4f711b3c6d875eadb..5ac9b467bfe537e68b8c66270799d3b7a2f64a7c 100644 GIT binary patch delta 3615 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

BXkG_VL&t? zu*FnyXFNVc_o5s?_z?W9QGz1`zIPHkh#%i^v!9z{&6HS^6CJwRoG^y~JJ6C^Uac#e zjN}BkeLgs~ZcDalD;FNbdiF@`@sfN%3?q5yJ`CBzeri2dv3N267}pHP<*^~ 'AdapterService': + if cls._instance is None: + with cls._lock: + if cls._instance is None: + cls._instance = super().__new__(cls) + cls._instance._initialized = False + return cls._instance def __init__(self): - self.lock = RLock() - - # 已注册的适配器工厂 - self.factories: Dict[str, Callable[[], DataSourceAdapter]] = {} - - # 适配器配置 - self.configs: Dict[str, dict] = {} - - # 当前激活的适配器实例 - self.active_adapters: Dict[str, DataSourceAdapter] = {} - - # 适配器元数据 - self.metadata: Dict[str, dict] = {} + # 避免重复初始化 + if self._initialized: + return - # 注册内置适配器 - self._register_builtin_adapters() + with self._lock: + if self._initialized: + return + + self.lock = RLock() + + # 已注册的适配器工厂 + self.factories: Dict[str, Callable[[], DataSourceAdapter]] = {} + + # 适配器配置 + self.configs: Dict[str, dict] = {} + + # 当前激活的适配器实例 + self.active_adapters: Dict[str, DataSourceAdapter] = {} + + # 适配器元数据 + self.metadata: Dict[str, dict] = {} + + # 注册内置适配器 + self._register_builtin_adapters() + + self._initialized = True def _register_builtin_adapters(self): """注册内置适配器""" @@ -155,12 +180,15 @@ class AdapterService: print(f"Using adapter: {active_name}") # 返回已激活的适配器实例 if active_name in self.active_adapters: + print(f"Adapter {active_name} already connected, reusing...") return self.active_adapters[active_name] - # 如果配置为启用但未激活,尝试连接 - if active_name in self.configs and self.configs[active_name].get("enabled"): - # 启动异步连接(不等待) - asyncio.create_task(self._connect_adapter(active_name)) + # 如果适配器已注册但未连接,尝试连接 + # 检查适配器是否已注册(在 factories 中) + if active_name in self.factories: + print(f"Adapter {active_name} registered but not connected, connecting...") + # 注意:这里不直接调用异步方法,让调用方处理连接 + # 返回 None 表示需要连接,由服务层调用 _connect_adapter # 如果没有激活的适配器,返回None return None