From 676f258981d0784528265a75d866dce3b5800586 Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Sun, 26 May 2024 21:09:23 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E9=87=8D=E5=90=AF=E5=90=8E=E7=BB=88?= =?UTF-8?q?=E6=AD=A2=E5=AD=90=E8=BF=9B=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addons/dashboard/server.py | 5 ++--- astrbot/core.py | 7 +------ type/types.py | 4 ++++ util/plugin_dev/api/v1/message.py | 2 +- util/updator.py | 25 +++++++++++++++++++++++++ 5 files changed, 33 insertions(+), 10 deletions(-) diff --git a/addons/dashboard/server.py b/addons/dashboard/server.py index 4eb5ef0fb..ff634a91f 100644 --- a/addons/dashboard/server.py +++ b/addons/dashboard/server.py @@ -16,7 +16,7 @@ from persist.session import dbConn from type.register import RegisteredPlugin from typing import List from util.cmd_config import CmdConfig -from util.updator import check_update, update_project, request_release_info +from util.updator import check_update, update_project, request_release_info, _reboot from SparkleLogging.utils.core import LogManager from logging import Logger logger: Logger = LogManager.GetLogger(log_name='astrbot-core') @@ -344,8 +344,7 @@ class AstrBotDashBoard(): def shutdown_bot(self, delay_s: int): time.sleep(delay_s) - py = sys.executable - os.execl(py, py, *sys.argv) + _reboot() def _get_configs(self, namespace: str): if namespace == "": diff --git a/astrbot/core.py b/astrbot/core.py index f21795a29..2bb03ed40 100644 --- a/astrbot/core.py +++ b/astrbot/core.py @@ -83,6 +83,7 @@ def init(): _global_object = GlobalObject() _global_object.version = VERSION _global_object.base_config = cfg + _global_object.logger = logger logger.info("AstrBot v" + VERSION) if 'reply_prefix' in cfg: @@ -441,12 +442,6 @@ async def oper_msg(message: AstrBotMessage, return command = command_result[2] - if command == "update latest r": - def update_restart(): - py = sys.executable - os.execl(py, py, *sys.argv) - return MessageResult(command_result[1] + "\n\n即将自动重启。", callback=update_restart) - if not command_result[0]: return MessageResult(f"指令调用错误: \n{str(command_result[1])}") diff --git a/type/types.py b/type/types.py index 7964ce26b..3e4ff827f 100644 --- a/type/types.py +++ b/type/types.py @@ -1,5 +1,7 @@ + from type.register import * from typing import List +from logging import Logger class GlobalObject: ''' @@ -17,6 +19,8 @@ class GlobalObject: unique_session: bool # 是否开启了独立会话 default_personality: dict dashboard_data = None + + logger: Logger = None def __init__(self): self.nick = None # gocq 的昵称 diff --git a/util/plugin_dev/api/v1/message.py b/util/plugin_dev/api/v1/message.py index 39722f709..c1b324359 100644 --- a/util/plugin_dev/api/v1/message.py +++ b/util/plugin_dev/api/v1/message.py @@ -1,5 +1,5 @@ from astrbot.core import oper_msg -from type.message import AstrMessageEvent, AstrBotMessage +from type.message import * from type.command import CommandResult from model.platform._message_result import MessageResult diff --git a/util/updator.py b/util/updator.py index f624bb75a..8d9fef541 100644 --- a/util/updator.py +++ b/util/updator.py @@ -6,10 +6,35 @@ except BaseException as e: has_git = False import sys, os import requests +import psutil from type.config import VERSION +from SparkleLogging.utils.core import LogManager +from logging import Logger + +logger: Logger = LogManager.GetLogger(log_name='astrbot-core') + + +def terminate_child_processes(): + try: + parent = psutil.Process(os.getpid()) + children = parent.children(recursive=True) + logger.info(f"正在终止 {len(children)} 个子进程。") + for child in children: + logger.info(f"正在终止子进程 {child.pid}") + child.terminate() + try: + child.wait(timeout=3) + except psutil.NoSuchProcess: + continue + except psutil.TimeoutExpired: + logger.info(f"子进程 {child.pid} 没有被正常终止, 正在强行杀死。") + child.kill() + except psutil.NoSuchProcess: + pass def _reboot(): py = sys.executable + terminate_child_processes() os.execl(py, py, *sys.argv) def find_repo() -> Repo: