"""
|
代码队列管理
|
"""
|
import copy
|
|
|
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())
|
|
def get_distributed_codes(self):
|
"""
|
获取已经分配的代码
|
@return:
|
"""
|
codes = self.distibuted_code_callback_dict.keys()
|
return copy.deepcopy(codes)
|