refactor(schedule): 异步化月度计划生成以避免阻塞
将月度计划的生成过程从同步阻塞模式重构为异步非阻塞模式。 在 `ScheduleManager` 中,当月度计划耗尽时,现在会通过调用新的 `trigger_generate_monthly_plans` 方法来启动一个后台生成任务,而不是 `await` 其完成。这可以防止在生成新计划时(可能耗时较长)阻塞日常任务的调度流程。 同时,修复了 `MonthlyPlanManager` 中一个排序逻辑错误,确保在计划数量超出上限时,正确删除最旧的计划而不是最新的。
This commit is contained in:
committed by
Windpicker-owo
parent
b65eb6dc81
commit
255c7e2efb
@@ -231,17 +231,15 @@ class ScheduleManager:
|
||||
|
||||
# 如果计划耗尽,则触发补充生成
|
||||
if not sampled_plans:
|
||||
logger.info("可用的月度计划已耗尽或不足,尝试进行补充生成...")
|
||||
logger.info("可用的月度计划已耗尽或不足,触发后台补充生成...")
|
||||
from mmc.src.schedule.monthly_plan_manager import monthly_plan_manager
|
||||
|
||||
success = await monthly_plan_manager.generate_monthly_plans(current_month_str)
|
||||
if success:
|
||||
logger.info("补充生成完成,重新抽取月度计划...")
|
||||
sampled_plans = get_smart_plans_for_daily_schedule(
|
||||
current_month_str, max_count=3, avoid_days=avoid_days
|
||||
)
|
||||
else:
|
||||
logger.warning("月度计划补充生成失败。")
|
||||
|
||||
# 以非阻塞方式触发月度计划生成
|
||||
monthly_plan_manager.trigger_generate_monthly_plans(current_month_str)
|
||||
|
||||
# 注意:这里不再等待生成结果,因此后续代码不会立即获得新计划。
|
||||
# 日程将基于当前可用的信息生成,新计划将在下一次日程生成时可用。
|
||||
logger.info("月度计划的后台生成任务已启动,本次日程将不包含新计划。")
|
||||
|
||||
if sampled_plans:
|
||||
plan_texts = "\n".join([f"- {plan.plan_text}" for plan in sampled_plans])
|
||||
|
||||
Reference in New Issue
Block a user