import importlib from multiprocessing import Process, Queue class Dispatcher: def __init__(self, config): self.config = config self.plugins = config['server']['plugins'] self.collector_to_storage_queue = Queue() self.manage_queue = Queue() self.get_queue = Queue() def start_plugins(self): self.processes = [] # storage模块 storage_config = self.config['modules']['storage'][0] storage_instance = self.get_module_instance(storage_config) storage_instance.set_input_queue(self.collector_to_storage_queue) storage_instance.set_manage_queue(self.manage_queue) storage_instance.set_get_queue(self.get_queue) storage_process = Process(target=storage_instance.run, name=storage_config['name']) self.processes.append(storage_process) storage_process.start() # collector模块 for collector_config in self.config['modules']['collector']: collector_instance = self.get_module_instance(collector_config) collector_instance.set_output_queue(self.collector_to_storage_queue) collector_process = Process(target=collector_instance.run, name=collector_config['name']) self.processes.append(collector_process) collector_process.start() # sender模块 sender_config = self.config['modules']['sender'][0] sender_instance = self.get_module_instance(sender_config) sender_instance.set_manage_queue(self.manage_queue) sender_process = Process(target=sender_instance.run, name=sender_config['name']) self.processes.append(sender_process) sender_process.start() def get_module_instance(self, module_config): module = importlib.import_module(module_config['path']) ModuleClass = getattr(module, module_config['name']) return ModuleClass(module_config['params']) def run(self): self.start_module_processes() for p in self.processes: p.join()