From c65576a09b8c808b86daabc62e2ae3cb07f5b04c Mon Sep 17 00:00:00 2001 From: liuwei Date: Wed, 19 Mar 2025 09:39:38 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=8C=87=E4=BB=A4=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- job_decorators.py | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/job_decorators.py b/job_decorators.py index 9c722fe..b33400a 100644 --- a/job_decorators.py +++ b/job_decorators.py @@ -38,26 +38,28 @@ def scheduled_job(cron: str, name: Optional[str] = None, enabled: bool = True): return decorator +# 修改 register_scheduled_jobs 函数 + def register_scheduled_jobs(job_instance): - """ - 注册所有被装饰的定时任务到Job实例 + """注册所有标记了 @scheduled_job 装饰器的方法 - :param job_instance: Job类实例,必须有add_job方法 - :return: 注册的任务数量 + Args: + job_instance: 包含定时任务的实例 """ - count = 0 - - # 获取实例的所有方法 - for name, method in inspect.getmembers(job_instance, predicate=inspect.ismethod): - # 检查原始函数是否在scheduled_tasks中 - original_func = method.__func__ + if not hasattr(job_instance, 'scheduled_jobs'): + return - for task in scheduled_tasks: - if task["func"].__name__ == original_func.__name__ and task["enabled"]: - # 注册任务 - job_instance.add_job(method, task["cron"], task["name"]) - count += 1 - break - - LOG.info(f"已注册 {count} 个定时任务") - return count \ No newline at end of file + for task in job_instance.scheduled_jobs: + method = getattr(job_instance, task["method_name"]) + # 使用正确的方法添加任务 + if hasattr(job_instance, 'add_job'): + job_instance.add_job(method, task["cron"], task["name"]) + elif hasattr(job_instance, 'add_scheduled_job'): + job_instance.add_scheduled_job(method, task["cron"], task["name"]) + else: + # 如果没有合适的方法,记录错误 + import logging + logging.getLogger(__name__).error( + f"无法为 {job_instance.__class__.__name__} 添加定时任务," + f"缺少 add_job 或 add_scheduled_job 方法" + ) \ No newline at end of file