add banbanmini backend
This commit is contained in:
57
talkingq-url/services/schedule_session_cleanup.py
Normal file
57
talkingq-url/services/schedule_session_cleanup.py
Normal file
@@ -0,0 +1,57 @@
|
||||
import asyncio
|
||||
from config import settings
|
||||
from services.audio_session import audio_session_manager
|
||||
from utils.logger import session_logger
|
||||
from services.conversation_history import conversation_history_manager
|
||||
|
||||
async def run_in_executor(func, *args):
|
||||
loop = asyncio.get_running_loop()
|
||||
return await loop.run_in_executor(None, func, *args)
|
||||
|
||||
async def background_cleanup_task():
|
||||
try:
|
||||
while True:
|
||||
await asyncio.sleep(settings.cleanup_interval)
|
||||
|
||||
current_time = asyncio.get_running_loop().time()
|
||||
audio_sessions_to_clean = []
|
||||
|
||||
sessions = await audio_session_manager.get_all_sessions()
|
||||
for session_key, session in sessions:
|
||||
device_id, session_id = session_key
|
||||
if current_time - session.last_activity_time > settings.session_timeout:
|
||||
audio_sessions_to_clean.append(session_key)
|
||||
session_logger.info(
|
||||
device_id,
|
||||
"cleanup",
|
||||
f"清理过期的音频会话, 超时: {settings.session_timeout}秒"
|
||||
)
|
||||
|
||||
for session_key in audio_sessions_to_clean:
|
||||
await audio_session_manager.remove_session(session_key)
|
||||
|
||||
role_histories_to_clean = []
|
||||
|
||||
for (device_id, role_key), history in conversation_history_manager.role_histories.items():
|
||||
if current_time - history.last_interaction_time > settings.conversation_history_timeout:
|
||||
role_histories_to_clean.append((device_id, role_key))
|
||||
session_logger.info(
|
||||
device_id,
|
||||
"cleanup",
|
||||
f"发现过期的对话历史缓存: {role_key}, 超时: {settings.conversation_history_timeout}秒"
|
||||
)
|
||||
|
||||
for device_id, role_key in role_histories_to_clean:
|
||||
cache_key = (device_id, role_key)
|
||||
if cache_key in conversation_history_manager.role_histories:
|
||||
del conversation_history_manager.role_histories[cache_key]
|
||||
session_logger.info(
|
||||
device_id,
|
||||
"cleanup",
|
||||
f"已从内存中清理对话历史: {role_key}"
|
||||
)
|
||||
|
||||
except asyncio.CancelledError:
|
||||
session_logger.info("system", "cleanup", "后台清理任务已取消")
|
||||
except Exception as e:
|
||||
session_logger.error("system", "cleanup", f"后台清理任务出错: {str(e)}")
|
||||
Reference in New Issue
Block a user