引入lock防止同一个事件同时触发

This commit is contained in:
Windpicker-owo
2025-08-28 16:57:25 +08:00
parent 96a7dff86b
commit 935a82fa58

View File

@@ -2,7 +2,7 @@
事件管理器 - 实现Event和EventHandler的单例管理 事件管理器 - 实现Event和EventHandler的单例管理
提供统一的事件注册、管理和触发接口 提供统一的事件注册、管理和触发接口
""" """
import asyncio
from typing import Dict, Type, List, Optional, Any, Union from typing import Dict, Type, List, Optional, Any, Union
from threading import Lock from threading import Lock
@@ -39,6 +39,7 @@ class EventManager:
self._event_handlers: Dict[str, Type[BaseEventHandler]] = {} self._event_handlers: Dict[str, Type[BaseEventHandler]] = {}
self._pending_subscriptions: Dict[str, List[str]] = {} # 缓存失败的订阅 self._pending_subscriptions: Dict[str, List[str]] = {} # 缓存失败的订阅
self._initialized = True self._initialized = True
self.event_handle_lock = asyncio.Lock()
logger.info("EventManager 单例初始化完成") logger.info("EventManager 单例初始化完成")
def register_event(self, event_name: Union[EventType, str]) -> bool: def register_event(self, event_name: Union[EventType, str]) -> bool:
@@ -281,8 +282,8 @@ class EventManager:
if event is None: if event is None:
logger.error(f"事件 {event_name} 不存在,无法触发") logger.error(f"事件 {event_name} 不存在,无法触发")
return None return None
async with self.event_handle_lock:
return await event.activate(params) return await event.activate(params)
def init_default_events(self) -> None: def init_default_events(self) -> None:
"""初始化默认事件""" """初始化默认事件"""