34 lines
987 B
Python
34 lines
987 B
Python
import asyncio
|
|
import logging
|
|
from typing import Dict
|
|
|
|
logger = logging.getLogger('app')
|
|
|
|
# 全局取消注册表: session_id -> asyncio.Event
|
|
_cancel_registry: Dict[str, asyncio.Event] = {}
|
|
|
|
|
|
def register_cancel_event(session_id: str) -> asyncio.Event:
|
|
"""注册一个取消事件"""
|
|
event = asyncio.Event()
|
|
_cancel_registry[session_id] = event
|
|
logger.debug(f"Cancel event registered for session_id={session_id}")
|
|
return event
|
|
|
|
|
|
def trigger_cancel(session_id: str) -> bool:
|
|
"""触发取消事件"""
|
|
event = _cancel_registry.get(session_id)
|
|
if event:
|
|
event.set()
|
|
logger.info(f"Cancel triggered for session_id={session_id}")
|
|
return True
|
|
logger.warning(f"No active session found for session_id={session_id}")
|
|
return False
|
|
|
|
|
|
def unregister_cancel_event(session_id: str) -> None:
|
|
"""清理取消事件"""
|
|
_cancel_registry.pop(session_id, None)
|
|
logger.debug(f"Cancel event unregistered for session_id={session_id}")
|