From 7a70a730ba6603cd570b4d8cf508e7290725e94b Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Wed, 22 Jan 2025 21:14:26 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BB=BB=E5=8A=A1=E6=8A=A5=E9=94=99?= =?UTF-8?q?=E5=90=8E=E7=9A=84=E4=BC=98=E9=9B=85=E6=8A=A5=E9=94=99=E8=BE=93?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/core/core_lifecycle.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/astrbot/core/core_lifecycle.py b/astrbot/core/core_lifecycle.py index 6783875a4..417963971 100644 --- a/astrbot/core/core_lifecycle.py +++ b/astrbot/core/core_lifecycle.py @@ -1,3 +1,4 @@ +import traceback import asyncio import time import threading @@ -81,12 +82,30 @@ class AstrBotCoreLifecycle: for task in self.star_context._register_tasks: extra_tasks.append(asyncio.create_task(task, name=task.__name__)) - self.curr_tasks = [event_bus_task, *platform_tasks, *extra_tasks] + # self.curr_tasks = [event_bus_task, *platform_tasks, *extra_tasks] + + tasks_ = [event_bus_task, *platform_tasks, *extra_tasks] + for task in tasks_: + self.curr_tasks.append(asyncio.create_task(self._task_wrapper(task), name=task.get_name())) + self.start_time = int(time.time()) + + async def _task_wrapper(self, task: asyncio.Task): + try: + await task + except asyncio.CancelledError: + pass + except Exception as e: + + logger.error(f"------- 任务 {task.get_name()} 发生错误: {e}") + for line in traceback.format_exc().split("\n"): + logger.error(f"| {line}") + logger.error("-------") async def start(self): self._load() logger.info("AstrBot 启动完成。") + await asyncio.gather(*self.curr_tasks, return_exceptions=True) async def stop(self):