""" 代码队列管理 """ class CodeQueueDistributeManager: # queue_list def __init__(self, queue_list: list): flist = [] for i in range(0, len(queue_list)): flist.append((i, queue_list[i])) self.queue_list = flist self.distibuted_code_queue_dict = {} # 获取可用的队列 def get_available_queue(self): distibuted_queue_indexes = set() for code in self.distibuted_code_queue_dict: distibuted_queue_indexes.add(self.distibuted_code_queue_dict[code][0]) for q_info in self.queue_list: if q_info[0] not in distibuted_queue_indexes: return q_info return None # 为代码分配队列 def distribute_queue(self, code): if code in self.distibuted_code_queue_dict: return self.distibuted_code_queue_dict.get(code) q_info = self.get_available_queue() if not q_info: raise Exception("无可用的队列") self.distibuted_code_queue_dict[code] = q_info return q_info # 获取代码分配的队列 def get_distributed_queue(self, code): return self.distibuted_code_queue_dict.get(code) def release_distribute_queue(self, code): if code in self.distibuted_code_queue_dict: self.distibuted_code_queue_dict.pop(code) # 获取空闲的位置数量 def get_free_queue_count(self): return len(self.queue_list) - len(self.distibuted_code_queue_dict.keys()) # 回调对象分配 class CodeDataCallbackDistributeManager: # queue_list def __init__(self, callback_list: list): flist = [] for callback in callback_list: flist.append((id(callback), callback)) self.callback_list = flist self.distibuted_code_callback_dict = {} # 获取可用的队列 def get_available_callback(self): distibuted_callbacks_ids = set() for code in self.distibuted_code_callback_dict: distibuted_callbacks_ids.add(self.distibuted_code_callback_dict[code][0]) for callback in self.callback_list: if callback[0] not in distibuted_callbacks_ids: return callback return None # 为代码分配队列 def distribute_callback(self, code): if code in self.distibuted_code_callback_dict: return self.distibuted_code_callback_dict.get(code) callback_info = self.get_available_callback() if not callback_info: raise Exception("无可用的回调对象") self.distibuted_code_callback_dict[code] = callback_info return callback_info # 获取代码分配的队列 def get_distributed_callback(self, code): if code in self.distibuted_code_callback_dict: return self.distibuted_code_callback_dict.get(code)[1] else: return None def release_distribute_callback(self, code): if code in self.distibuted_code_callback_dict: self.distibuted_code_callback_dict.pop(code) # 获取空闲的位置数量 def get_free_queue_count(self): return len(self.callback_list) - len(self.distibuted_code_callback_dict.keys())