From ea6759824e446bf0aae7aa797d09733a722be53a Mon Sep 17 00:00:00 2001 From: HibiKier <775757368@qq.com> Date: Wed, 31 Dec 2025 10:26:18 +0800 Subject: [PATCH] refactor: streamline per-key lock creation in AuthSnapshotService using setdefault for atomicity --- zhenxun/services/auth_snapshot/service.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/zhenxun/services/auth_snapshot/service.py b/zhenxun/services/auth_snapshot/service.py index ca0565b3..2bd3ccfe 100644 --- a/zhenxun/services/auth_snapshot/service.py +++ b/zhenxun/services/auth_snapshot/service.py @@ -117,10 +117,8 @@ class AuthSnapshotService: except Exception as e: logger.debug(f"从Redis获取快照失败: {cache_key}", LOG_COMMAND, e=e) - # 3. 获取或创建 per-key 锁 - if cache_key not in cls._build_locks: - cls._build_locks[cache_key] = asyncio.Lock() - lock = cls._build_locks[cache_key] + # 3. 获取或创建 per-key 锁(使用 setdefault 保证原子性) + lock = cls._build_locks.setdefault(cache_key, asyncio.Lock()) # 4. 先尝试快速路径:检查是否有其他协程正在构建 if cache_key in cls._building: