refactor(schedule): 将日程生成转为后台异步任务

将即时日程生成的操作从直接调用修改为提交到异步任务管理器执行。这避免了在主流程中等待耗时较长的日程生成过程,改善了请求响应速度。

为此,新增了 `OnDemandScheduleGenerationTask` 类来封装按需生成日程的后台任务逻辑。
This commit is contained in:
minecraft1024a
2025-08-31 13:11:45 +08:00
parent e2a2d102e0
commit 0427d5cac1

View File

@@ -182,13 +182,14 @@ class ScheduleManager:
await self.generate_and_save_schedule() await self.generate_and_save_schedule()
async def generate_and_save_schedule(self): async def generate_and_save_schedule(self):
"""启动日程生成任务""" """日程生成任务提交到后台执行"""
if self.schedule_generation_running: if self.schedule_generation_running:
logger.info("日程生成任务已在运行中,跳过重复启动") logger.info("日程生成任务已在运行中,跳过重复启动")
return return
# 直接执行日程生成 logger.info("检测到需要生成日程,已提交后台任务。")
await self._async_generate_and_save_schedule() task = OnDemandScheduleGenerationTask(self)
await async_task_manager.add_task(task)
async def _async_generate_and_save_schedule(self): async def _async_generate_and_save_schedule(self):
"""异步生成并保存日程的内部方法""" """异步生成并保存日程的内部方法"""
@@ -444,6 +445,20 @@ class ScheduleManager:
return True return True
class OnDemandScheduleGenerationTask(AsyncTask):
"""按需生成日程的后台任务"""
def __init__(self, schedule_manager: "ScheduleManager"):
task_name = f"OnDemandScheduleGenerationTask-{datetime.now().strftime('%Y%m%d%H%M%S')}"
super().__init__(task_name=task_name)
self.schedule_manager = schedule_manager
async def run(self):
logger.info(f"后台任务 {self.task_name} 开始执行日程生成。")
await self.schedule_manager._async_generate_and_save_schedule()
logger.info(f"后台任务 {self.task_name} 完成。")
class DailyScheduleGenerationTask(AsyncTask): class DailyScheduleGenerationTask(AsyncTask):
"""每日零点自动生成新日程的任务""" """每日零点自动生成新日程的任务"""