From 0427d5cac1d68a12e52f24957f6ac768f0022591 Mon Sep 17 00:00:00 2001 From: minecraft1024a Date: Sun, 31 Aug 2025 13:11:45 +0800 Subject: [PATCH] =?UTF-8?q?refactor(schedule):=20=E5=B0=86=E6=97=A5?= =?UTF-8?q?=E7=A8=8B=E7=94=9F=E6=88=90=E8=BD=AC=E4=B8=BA=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E5=BC=82=E6=AD=A5=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将即时日程生成的操作从直接调用修改为提交到异步任务管理器执行。这避免了在主流程中等待耗时较长的日程生成过程,改善了请求响应速度。 为此,新增了 `OnDemandScheduleGenerationTask` 类来封装按需生成日程的后台任务逻辑。 --- src/schedule/schedule_manager.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/schedule/schedule_manager.py b/src/schedule/schedule_manager.py index d83841ce6..e4457a3fc 100644 --- a/src/schedule/schedule_manager.py +++ b/src/schedule/schedule_manager.py @@ -182,13 +182,14 @@ class ScheduleManager: await self.generate_and_save_schedule() async def generate_and_save_schedule(self): - """启动日程生成任务""" + """将日程生成任务提交到后台执行""" if self.schedule_generation_running: logger.info("日程生成任务已在运行中,跳过重复启动") return - # 直接执行日程生成 - await self._async_generate_and_save_schedule() + logger.info("检测到需要生成日程,已提交后台任务。") + task = OnDemandScheduleGenerationTask(self) + await async_task_manager.add_task(task) async def _async_generate_and_save_schedule(self): """异步生成并保存日程的内部方法""" @@ -444,6 +445,20 @@ class ScheduleManager: 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): """每日零点自动生成新日程的任务"""