From 8b848e8a9fa242b39f92f3a28faf89be10a6e456 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期五, 17 三月 2023 17:43:32 +0800 Subject: [PATCH] 首板策略优化 --- gpcode_manager.py | 55 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 47 insertions(+), 8 deletions(-) diff --git a/gpcode_manager.py b/gpcode_manager.py index b1099a8..df508e6 100644 --- a/gpcode_manager.py +++ b/gpcode_manager.py @@ -11,6 +11,8 @@ import tool import decimal +from ths import l2_listen_pos_health_manager + __redisManager = redis_manager.RedisManager(0) @@ -80,7 +82,7 @@ return val.get(name) @classmethod - def add_first_code_name(cls, code,name): + def add_first_code_name(cls, code, name): val = cls.__get_redis().get("gp_list_names_first") if not val: return None @@ -153,6 +155,36 @@ return True else: return False + + +# 鎯宠涔扮殑浠g爜 +class WantBuyCodesManager: + redisManager = redis_manager.RedisManager(0) + __redis_key = "want_buy_codes" + + @classmethod + def __get_redis(cls): + return cls.redisManager.getRedis() + + @classmethod + def clear(cls): + cls.__get_redis().delete(cls.__redis_key) + + @classmethod + def add_code(cls, code): + cls.__get_redis().sadd(cls.__redis_key, code) + + @classmethod + def remove_code(cls, code): + cls.__get_redis().srem(cls.__redis_key, code) + + @classmethod + def is_in(cls, code): + return cls.__get_redis().sismember(cls.__redis_key, code) + + @classmethod + def list_code(cls): + return cls.__get_redis().smembers(cls.__redis_key) def __parse_codes_data(code_datas): @@ -480,12 +512,13 @@ client_ids = client_manager.getValidL2Clients() else: client_ids.append(client_id) - random.shuffle(client_ids) + # random.shuffle(client_ids) + available_positions = [] for client_id in client_ids: redis_instance = __redisManager.getRedis() k = "listen_code-{}-*".format(client_id) keys = redis_instance.keys(k) - random.shuffle(keys) + # random.shuffle(keys) codes = [] for key in keys: index = key.split("-")[-1] @@ -493,10 +526,9 @@ continue result = redis_instance.get(key) if result is None or len(result) == 0: - return client_id, int(key.replace("listen_code-{}-".format(client_id), "")) + available_positions.append((client_id, int(key.replace("listen_code-{}-".format(client_id), "")))) else: codes.append((key, result)) - # 鏌ヨ鏄惁鏈夐噸澶嶇殑浠g爜 codes_set = set() count = 0 @@ -505,6 +537,15 @@ codes_set.add(code[1]) if len(codes_set) < count: return client_id, int(code[0].replace("listen_code-{}-".format(client_id), "")) + + if available_positions: + # 鑾峰彇鍋ュ悍鐘舵�� + available_positions_health_states = l2_listen_pos_health_manager.list_health_state(available_positions) + available_positions.sort(key=lambda x: available_positions_health_states[x], reverse=True) + # 鍙栫1涓暟鎹� + return available_positions[0][0], available_positions[0][1] + + return None, None @@ -591,6 +632,4 @@ if __name__ == '__main__': - print(get_free_listen_pos_count()) - print(get_name_code("鍗庤剦绉戞妧")) - print(get_name_codes()) + print(get_can_listen_pos()) -- Gitblit v1.8.0