mirror of
https://github.com/suyiiyii/nonebot-bison.git
synced 2026-05-10 18:57:56 +08:00
fix bug, add test case
This commit is contained in:
@@ -8,10 +8,11 @@ from ..utils import SchedulerConfig
|
||||
from .scheduler import Scheduler
|
||||
|
||||
scheduler_dict: dict[str, Scheduler] = {}
|
||||
_schedule_class_dict: dict[str, list[Target]] = {}
|
||||
|
||||
|
||||
async def init_scheduler():
|
||||
_schedule_class_dict: dict[str, list[Target]] = {}
|
||||
_schedule_class_platform_dict: dict[str, list[str]] = {}
|
||||
for platform in platform_manager.values():
|
||||
scheduler_class = platform.scheduler_class
|
||||
platform_name = platform.platform_name
|
||||
@@ -20,11 +21,18 @@ async def init_scheduler():
|
||||
_schedule_class_dict[scheduler_class] = targets
|
||||
else:
|
||||
_schedule_class_dict[scheduler_class].extend(targets)
|
||||
if scheduler_class not in _schedule_class_platform_dict:
|
||||
_schedule_class_platform_dict[scheduler_class] = [platform_name]
|
||||
else:
|
||||
_schedule_class_platform_dict[scheduler_class].append(platform_name)
|
||||
for scheduler_class, target_list in _schedule_class_dict.items():
|
||||
schedulable_args = []
|
||||
for target in target_list:
|
||||
schedulable_args.append((target.platform_name, T_Target(target.target)))
|
||||
scheduler_dict[scheduler_class] = Scheduler(scheduler_class, schedulable_args)
|
||||
platform_name_list = _schedule_class_platform_dict[scheduler_class]
|
||||
scheduler_dict[scheduler_class] = Scheduler(
|
||||
scheduler_class, schedulable_args, platform_name_list
|
||||
)
|
||||
|
||||
|
||||
async def handle_insert_new_target(platform_name: str, target: T_Target):
|
||||
@@ -39,5 +47,5 @@ async def handle_delete_target(platform_name: str, target: T_Target):
|
||||
scheduler_obj.delete_schedulable(platform_name, target)
|
||||
|
||||
|
||||
config.register_add_target_hook(handle_delete_target)
|
||||
config.register_add_target_hook(handle_insert_new_target)
|
||||
config.register_delete_target_hook(handle_delete_target)
|
||||
|
||||
@@ -25,7 +25,12 @@ class Scheduler:
|
||||
|
||||
schedulable_list: list[Schedulable]
|
||||
|
||||
def __init__(self, name: str, schedulables: list[tuple[str, Target]]):
|
||||
def __init__(
|
||||
self,
|
||||
name: str,
|
||||
schedulables: list[tuple[str, Target]],
|
||||
platform_name_list: list[str],
|
||||
):
|
||||
conf = SchedulerConfig.registry.get(name)
|
||||
self.name = name
|
||||
if not conf:
|
||||
@@ -33,15 +38,13 @@ class Scheduler:
|
||||
raise RuntimeError(f"{name} not found")
|
||||
self.scheduler_config = conf
|
||||
self.schedulable_list = []
|
||||
platform_name_set = set()
|
||||
for platform_name, target in schedulables:
|
||||
self.schedulable_list.append(
|
||||
Schedulable(
|
||||
platform_name=platform_name, target=target, current_weight=0
|
||||
)
|
||||
)
|
||||
platform_name_set.add(platform_name)
|
||||
self.platform_name_list = list(platform_name_set)
|
||||
self.platform_name_list = platform_name_list
|
||||
self.pre_weight_val = 0 # 轮调度中“本轮”增加权重和的初值
|
||||
logger.info(
|
||||
f"register scheduler for {name} with {self.scheduler_config.schedule_type} {self.scheduler_config.schedule_setting}"
|
||||
|
||||
Reference in New Issue
Block a user