引入lock防止同一个事件同时触发
This commit is contained in:
@@ -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:
|
||||||
"""初始化默认事件"""
|
"""初始化默认事件"""
|
||||||
|
|||||||
Reference in New Issue
Block a user