From b0cfb4f64f16f3fd5c01a50d0e9b65586cb643fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=81=E7=9D=BF=E6=AF=85?= Date: Tue, 3 Jun 2025 11:15:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E7=9A=84=E6=9D=83=E9=87=8D=E5=B1=9E=E6=80=A7AsycnTask.weight?= =?UTF-8?q?=EF=BC=8C=E9=BB=98=E8=AE=A4=E5=80=BC=E4=B8=BA1=EF=BC=8C?= =?UTF-8?q?=E6=AF=8F=E6=AC=A1=E6=B7=BB=E5=8A=A0=E5=AE=8C=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=90=8E=E4=BC=9A=E5=AF=B9=E4=BB=BB=E5=8A=A1=E4=BB=8E=E5=A4=A7?= =?UTF-8?q?=E5=88=B0=E5=B0=8F=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/manager/async_task_manager.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/manager/async_task_manager.py b/src/manager/async_task_manager.py index e198d0e1..1c00da36 100644 --- a/src/manager/async_task_manager.py +++ b/src/manager/async_task_manager.py @@ -12,7 +12,7 @@ logger = get_logger("async_task_manager") class AsyncTask: """异步任务基类""" - def __init__(self, task_name: str | None = None, wait_before_start: int = 0, run_interval: int = 0): + def __init__(self, task_name: str | None = None, wait_before_start: int = 0, run_interval: int = 0, weight: int = 1): self.task_name: str = task_name or self.__class__.__name__ """任务名称""" @@ -22,6 +22,9 @@ class AsyncTask: self.run_interval: int = run_interval """多次运行的时间间隔(单位:秒,设为0则仅运行一次)""" + self.weight: int = weight + """任务权重,默认为1,权重越大,任务优先级越高""" + @abstractmethod async def run(self): """ @@ -104,6 +107,7 @@ class AsyncTaskManager: self.tasks[task.task_name] = task_inst # 将任务添加到任务列表 logger.debug(f"已启动任务 '{task.task_name}'") + await self.sort_tasks_by_weight() # 确保任务按权重从大到小排序 def get_tasks_status(self) -> Dict[str, Dict[str, str]]: """ @@ -115,6 +119,15 @@ class AsyncTaskManager: "status": "running" if not task.done() else "done", } return tasks_status + + async def sort_tasks_by_weight(self): + """ + 按照任务权重对任务从大到小排序 + """ + async with self._lock: + sorted_tasks = sorted(self.tasks.items(), key=lambda item: item[1].weight, reverse=True) + self.tasks = {name: task for name, task in sorted_tasks} + logger.debug("已按照任务权重对任务进行排序") async def stop_and_wait_all_tasks(self): """