新增了任务的权重属性AsycnTask.weight,默认值为1,每次添加完任务后会对任务从大到小排序

pull/1018/head
丁睿毅 2025-06-03 11:15:52 +08:00
parent 70d5516dcc
commit b0cfb4f64f
1 changed files with 14 additions and 1 deletions

View File

@ -12,7 +12,7 @@ logger = get_logger("async_task_manager")
class AsyncTask: 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__ self.task_name: str = task_name or self.__class__.__name__
"""任务名称""" """任务名称"""
@ -22,6 +22,9 @@ class AsyncTask:
self.run_interval: int = run_interval self.run_interval: int = run_interval
"""多次运行的时间间隔单位设为0则仅运行一次""" """多次运行的时间间隔单位设为0则仅运行一次"""
self.weight: int = weight
"""任务权重默认为1权重越大任务优先级越高"""
@abstractmethod @abstractmethod
async def run(self): async def run(self):
""" """
@ -104,6 +107,7 @@ class AsyncTaskManager:
self.tasks[task.task_name] = task_inst # 将任务添加到任务列表 self.tasks[task.task_name] = task_inst # 将任务添加到任务列表
logger.debug(f"已启动任务 '{task.task_name}'") logger.debug(f"已启动任务 '{task.task_name}'")
await self.sort_tasks_by_weight() # 确保任务按权重从大到小排序
def get_tasks_status(self) -> Dict[str, Dict[str, str]]: def get_tasks_status(self) -> Dict[str, Dict[str, str]]:
""" """
@ -115,6 +119,15 @@ class AsyncTaskManager:
"status": "running" if not task.done() else "done", "status": "running" if not task.done() else "done",
} }
return tasks_status 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): async def stop_and_wait_all_tasks(self):
""" """