fix 定时服务立即生效

fix #1615
This commit is contained in:
jxxghp 2024-03-08 16:22:53 +08:00
parent b5d7b6fb53
commit 851864cd49
4 changed files with 40 additions and 10 deletions

View File

@ -306,8 +306,8 @@ def reload_module(_: schemas.TokenPayload = Depends(verify_token)):
""" """
重新加载模块 重新加载模块
""" """
ModuleManager().stop() ModuleManager().reload()
ModuleManager().load_modules() Scheduler().init()
return schemas.Response(success=True) return schemas.Response(success=True)

View File

@ -267,7 +267,10 @@ class Command(metaclass=Singleton):
停止事件处理线程 停止事件处理线程
""" """
self._event.set() self._event.set()
self._thread.join() try:
self._thread.join()
except Exception as e:
logger.error(f"停止事件处理线程出错:{str(e)} - {traceback.format_exc()}")
def get_commands(self): def get_commands(self):
""" """

View File

@ -51,6 +51,13 @@ class ModuleManager(metaclass=Singleton):
if hasattr(module, "stop"): if hasattr(module, "stop"):
module.stop() module.stop()
def reload(self):
"""
重新加载所有模块
"""
self.stop()
self.load_modules()
def test(self, modleid: str) -> Tuple[bool, str]: def test(self, modleid: str) -> Tuple[bool, str]:
""" """
测试模块 测试模块

View File

@ -39,16 +39,21 @@ class Scheduler(metaclass=Singleton):
定时任务管理 定时任务管理
""" """
# 定时服务 # 定时服务
_scheduler = BackgroundScheduler(timezone=settings.TZ, _scheduler = None
executors={
'default': ThreadPoolExecutor(100)
})
# 退出事件 # 退出事件
_event = threading.Event() _event = threading.Event()
# 锁 # 锁
_lock = threading.Lock() _lock = threading.Lock()
# 各服务的运行状态
_jobs = {}
def __init__(self): def __init__(self):
self.init()
def init(self):
"""
初始化定时服务
"""
def clear_cache(): def clear_cache():
""" """
@ -92,10 +97,19 @@ class Scheduler(metaclass=Singleton):
} }
} }
# 停止定时服务
self.stop()
# 调试模式不启动定时服务 # 调试模式不启动定时服务
if settings.DEV: if settings.DEV:
return return
# 创建定时服务
self._scheduler = BackgroundScheduler(timezone=settings.TZ,
executors={
'default': ThreadPoolExecutor(100)
})
# CookieCloud定时同步 # CookieCloud定时同步
if settings.COOKIECLOUD_INTERVAL \ if settings.COOKIECLOUD_INTERVAL \
and str(settings.COOKIECLOUD_INTERVAL).isdigit(): and str(settings.COOKIECLOUD_INTERVAL).isdigit():
@ -385,6 +399,12 @@ class Scheduler(metaclass=Singleton):
""" """
关闭定时服务 关闭定时服务
""" """
self._event.set() try:
if self._scheduler.running: if self._scheduler:
self._scheduler.shutdown() self._event.set()
self._scheduler.remove_all_jobs()
if self._scheduler.running:
self._scheduler.shutdown()
self._scheduler = None
except Exception as e:
logger.error(f"停止定时任务失败::{str(e)} - {traceback.format_exc()}")