45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""
|
||
任务处理器注册表。
|
||
Worker 启动时注册所有可用的 handler,收到任务时按 task_type 查找对应 handler。
|
||
"""
|
||
from __future__ import annotations
|
||
|
||
import logging
|
||
from typing import Dict, Optional, Type
|
||
|
||
from worker.tasks.base import BaseTaskHandler
|
||
|
||
logger = logging.getLogger("worker.tasks.registry")
|
||
|
||
# task_type → handler 实例
|
||
_registry: Dict[str, BaseTaskHandler] = {}
|
||
|
||
|
||
def register_handler(handler_cls: Type[BaseTaskHandler]) -> None:
|
||
"""注册一个任务处理器类(自动实例化)。"""
|
||
instance = handler_cls()
|
||
if not instance.task_type:
|
||
raise ValueError(f"{handler_cls.__name__} 未设置 task_type")
|
||
_registry[instance.task_type] = instance
|
||
logger.info("注册任务处理器: %s → %s", instance.task_type, handler_cls.__name__)
|
||
|
||
|
||
def get_handler(task_type: str) -> Optional[BaseTaskHandler]:
|
||
"""根据 task_type 获取对应的处理器实例。"""
|
||
return _registry.get(task_type)
|
||
|
||
|
||
def list_handlers() -> list[str]:
|
||
"""列出所有已注册的 task_type。"""
|
||
return list(_registry.keys())
|
||
|
||
|
||
def register_all_handlers() -> None:
|
||
"""注册所有内置任务处理器。在此函数中 import 并注册。"""
|
||
from worker.tasks.boss_recruit import BossRecruitHandler
|
||
register_handler(BossRecruitHandler)
|
||
# 未来扩展:在此处添加新的 handler
|
||
# from worker.tasks.xxx import XxxHandler
|
||
# register_handler(XxxHandler)
|