diff --git a/backend/app/api/auth.py b/backend/app/api/auth.py index 27aaab10..bb4ac1a6 100644 --- a/backend/app/api/auth.py +++ b/backend/app/api/auth.py @@ -325,11 +325,6 @@ async def data_reset(req: DataResetRequest, admin: dict = Depends(get_current_ad await db.commit() - # 清除内存缓存 - from app.engine.recommender import _latest_result - import app.engine.recommender as recommender_mod - recommender_mod._latest_result = None - logger.info(f"管理员 {admin['username']} 执行数据重置: mode={req.mode}, deleted={deleted}") return { diff --git a/backend/app/engine/__pycache__/recommender.cpython-313.pyc b/backend/app/engine/__pycache__/recommender.cpython-313.pyc index bce8b6da..531df4db 100644 Binary files a/backend/app/engine/__pycache__/recommender.cpython-313.pyc and b/backend/app/engine/__pycache__/recommender.cpython-313.pyc differ diff --git a/backend/app/engine/recommender.py b/backend/app/engine/recommender.py index 07981289..a5ac4e8b 100644 --- a/backend/app/engine/recommender.py +++ b/backend/app/engine/recommender.py @@ -15,9 +15,6 @@ from app.db import tables logger = logging.getLogger(__name__) -# 内存中的最新推荐结果 -_latest_result: dict | None = None - # 扫描锁:防止同时触发两次扫描 _scan_lock = asyncio.Lock() _scan_running = False @@ -25,11 +22,11 @@ _scan_running = False async def refresh_recommendations(trade_date: str = None, scan_session: str = "manual") -> dict: """刷新推荐列表(带扫描锁防止并发)""" - global _latest_result, _scan_running + global _scan_running if _scan_lock.locked(): logger.warning("扫描已在执行中,跳过本次触发") - return _latest_result or {"market_temp": None, "hot_sectors": [], "recommendations": []} + return await _load_today_from_db() async with _scan_lock: _scan_running = True @@ -41,8 +38,6 @@ async def refresh_recommendations(trade_date: str = None, scan_session: str = "m rec.scan_session = scan_session rec.created_at = datetime.now() - _latest_result = result - # 持久化到数据库 await _save_to_db(result) @@ -260,18 +255,12 @@ async def get_performance_stats() -> dict: async def get_latest_recommendations() -> dict: - """获取最新推荐结果""" - if _latest_result: - return _latest_result - # 如果内存中没有,从数据库加载今日的 + """获取最新推荐结果(直接从数据库读取,不做内存缓存)""" return await _load_today_from_db() async def get_latest_sectors() -> list[SectorInfo]: - """获取最新的板块热度数据(只读缓存,不触发扫描)""" - if _latest_result and _latest_result.get("hot_sectors"): - return _latest_result["hot_sectors"] - # 内存中没有,从数据库加载 + """获取最新的板块热度数据(从数据库读取,不触发扫描)""" return await _load_sectors_from_db()