From 819888d999bb10cda0c4c9dc2de60ae1a3ad83d5 Mon Sep 17 00:00:00 2001 From: KimigaiiWuyi <444835641@qq.com> Date: Sat, 8 Feb 2025 04:33:20 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20=E9=87=8D=E8=BD=BD=E6=97=B6?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=E9=87=8D=E5=A4=8D=E5=AE=9A=E6=97=B6=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gsuid_core/aps.py | 20 ++++++++++++++++ gsuid_core/gss.py | 23 ++----------------- .../utils/plugins_update/reload_plugin.py | 6 +++++ 3 files changed, 28 insertions(+), 21 deletions(-) diff --git a/gsuid_core/aps.py b/gsuid_core/aps.py index 528eb76..d4ae6e9 100644 --- a/gsuid_core/aps.py +++ b/gsuid_core/aps.py @@ -1,3 +1,4 @@ +import inspect from concurrent.futures import ThreadPoolExecutor from apscheduler.schedulers.asyncio import AsyncIOScheduler @@ -28,3 +29,22 @@ async def shutdown_scheduler(): if scheduler.running: scheduler.shutdown() logger.info('定时任务结束...') + + +def remove_repeat_job(): + repeat_jobs = {} + for i in scheduler.get_jobs(): + if i.name not in repeat_jobs: + repeat_jobs[i.name] = i + else: + source_i = inspect.getsource(repeat_jobs[i.name].func) + source_j = inspect.getsource(i.func) + if source_i == source_j: + scheduler.remove_job(i.id) + else: + logger.warning( + f'发现重复函数名定时任务{i.name}, 移除该任务...' + ) + scheduler.remove_job(i.id) + + del repeat_jobs diff --git a/gsuid_core/gss.py b/gsuid_core/gss.py index 621db95..3468fae 100644 --- a/gsuid_core/gss.py +++ b/gsuid_core/gss.py @@ -1,27 +1,8 @@ -import inspect - -from gsuid_core.aps import scheduler -from gsuid_core.logger import logger from gsuid_core.server import GsServer +from gsuid_core.aps import remove_repeat_job gss = GsServer() if not gss.is_load: gss.is_load = True gss.load_plugins() - - repeat_jobs = {} - for i in scheduler.get_jobs(): - if i.name not in repeat_jobs: - repeat_jobs[i.name] = i - else: - source_i = inspect.getsource(repeat_jobs[i.name].func) - source_j = inspect.getsource(i.func) - if source_i == source_j: - scheduler.remove_job(i.id) - else: - logger.warning( - f'发现重复函数名定时任务{i.name}, 移除该任务...' - ) - scheduler.remove_job(i.id) - - del repeat_jobs + remove_repeat_job() diff --git a/gsuid_core/utils/plugins_update/reload_plugin.py b/gsuid_core/utils/plugins_update/reload_plugin.py index 5992980..f36463b 100644 --- a/gsuid_core/utils/plugins_update/reload_plugin.py +++ b/gsuid_core/utils/plugins_update/reload_plugin.py @@ -3,6 +3,7 @@ import importlib from gsuid_core.sv import SL from gsuid_core.gss import gss from gsuid_core.logger import logger +from gsuid_core.aps import remove_repeat_job def reload_plugin(plugin_name: str): @@ -24,11 +25,16 @@ def reload_plugin(plugin_name: str): del SL.plugins[plugin_name] retcode = gss.load_plugin(plugin_name) + if retcode is None: + logger.info(f'❌ 未知的插件类型{plugin_name}...') + return '未知错误, 请检查控制台...' + if isinstance(retcode, str): logger.info(f'❌ 重载插件{plugin_name}失败...') return retcode else: for module in retcode: importlib.reload(module) + remove_repeat_job() logger.info(f'✨ 已重载插件{plugin_name}') return f'✨ 已重载插件{plugin_name}!'