diff --git a/Module/DeviceInfo.py b/Module/DeviceInfo.py index 16a56dc..abd722b 100644 --- a/Module/DeviceInfo.py +++ b/Module/DeviceInfo.py @@ -20,7 +20,7 @@ class DeviceInfo: _instance_lock = threading.Lock() # 离线宽限期 - REMOVE_GRACE_SEC = float(os.getenv("REMOVE_GRACE_SEC", "6.0")) + REMOVE_GRACE_SEC = 3.0 def __new__(cls, *args, **kwargs): if not cls._instance: @@ -62,6 +62,9 @@ class DeviceInfo: print("[Init] DeviceInfo 初始化完成") self._initialized = True + # ========================== + # 主循环 + # ========================== # ========================== # 主循环 # ========================== @@ -84,13 +87,21 @@ class DeviceInfo: # 当前已知的设备(本轮循环开始时) with self._lock: known = set(self._models.keys()) + # 当前已经维护的设备数量 + current_count = len(self._models) # 1. 处理在线设备 for udid in online: - # 更新心跳时间 + # 更新心跳时间(只要在 online 里,都记一笔,方便离线判断) self._last_seen[udid] = now - # 已经在列表里的设备,直接跳过“是否信任”检查 + # 如果是新设备并且数量已经 >= 6,直接忽略 + if udid not in known and current_count >= 6: + print(f"[Add] 设备数量已达 6 台,忽略新设备: {udid}") + LogManager.info(f"[Add] 设备数量已达上限(6),忽略新设备", udid=udid) + continue + + # 已经在列表里的设备,直接跳过“是否信任”检查和添加流程 if udid in known: continue @@ -107,9 +118,18 @@ class DeviceInfo: print(f"[Add] 检测设备 {udid} 信任状态异常: {e}") continue + # 再次确认一下数量(极端情况下,多线程同时改 models 的话更稳妥一点) + with self._lock: + if len(self._models) >= 6: + print(f"[Add] 二次检查: 设备数量已达 6 台,忽略新设备: {udid}") + LogManager.info(f"[Add] 二次检查数量上限,忽略新设备", udid=udid) + continue + # 确认“已信任”的新设备,才真正走 _add_device try: self._add_device(udid) + # 本轮循环内的计数也 +1,防止这一轮里连续加超过 6 台 + current_count += 1 except Exception as e: # 单设备异常不能干掉整个循环 LogManager.warning(f"[Add] 处理设备 {udid} 异常: {e}", udid=udid)