From 2f2516749615da866e96d8d24e499b7ecbb63a3e Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期一, 23 六月 2025 12:28:52 +0800 Subject: [PATCH] 默认交易模式变更/真实下单位置计算位置修改 --- code_attribute/gpcode_first_screen_manager.py | 145 ++++++++++++++++++++++++++++-------------------- 1 files changed, 84 insertions(+), 61 deletions(-) diff --git a/code_attribute/gpcode_first_screen_manager.py b/code_attribute/gpcode_first_screen_manager.py index 8203a35..a1ef0c2 100644 --- a/code_attribute/gpcode_first_screen_manager.py +++ b/code_attribute/gpcode_first_screen_manager.py @@ -8,76 +8,106 @@ from db.redis_manager_delegate import RedisUtils from utils import tool from db import redis_manager_delegate as redis_manager -from third_data import block_info - -__redisManager = redis_manager.RedisManager(0) -def __get_redis(): - return __redisManager.getRedis() +class FirstCodeDataManager: + __instance = None + __redisManager = redis_manager.RedisManager(0) + __db = 0 + __first_code_data_cache = {} + def __new__(cls, *args, **kwargs): + if not cls.__instance: + cls.__instance = super(FirstCodeDataManager, cls).__new__(cls, *args, **kwargs) + cls.__load_data() + return cls.__instance -__first_code_data_cache = {} + # 鍔犺浇鏁版嵁 + @classmethod + def __load_data(cls): + keys = RedisUtils.keys(cls.__get_redis(), "first_code_data-*") + for k in keys: + val = RedisUtils.get(cls.__get_redis(), k) + code = k.split("-")[-1] + if val: + cls.__first_code_data_cache[code] = json.loads(val) + @classmethod + def __get_redis(cls): + return cls.__redisManager.getRedis() -# 淇濆瓨棣栨澘绁ㄧ殑鏁版嵁 -# 1.棣栨娑ㄥ仠鏃堕棿 -# 2.鏈�杩戞定鍋滄椂闂� -# 3.棣栨鐐稿紑鏃堕棿 -# 4.鏈�杩戠偢寮�鏃堕棿 -# 5.鏄惁宸茬粡娑ㄥ仠 -def __save_first_code_data(code, data): - tool.CodeDataCacheUtil.set_cache(__first_code_data_cache, code, data) - RedisUtils.setex(__redisManager.getRedis(), f"first_code_data-{code}", tool.get_expire(), json.dumps(data)) + # 淇濆瓨棣栨澘绁ㄧ殑鏁版嵁 + # 1.棣栨娑ㄥ仠鏃堕棿 + # 2.鏈�杩戞定鍋滄椂闂� + # 3.棣栨鐐稿紑鏃堕棿 + # 4.鏈�杩戠偢寮�鏃堕棿 + # 5.鏄惁宸茬粡娑ㄥ仠 + def save_first_code_data(self, code, data): + tool.CodeDataCacheUtil.set_cache(self.__first_code_data_cache, code, data) + RedisUtils.setex_async(self.__db, f"first_code_data-{code}", tool.get_expire(), json.dumps(data)) + def get_first_code_data(self, code): + val = RedisUtils.get(self.__get_redis(), f"first_code_data-{code}") + if val is None: + return None + return json.loads(val) -def __get_first_code_data(code): - val = RedisUtils.get(__get_redis(), f"first_code_data-{code}") - if val is None: + def get_first_code_data_cache(self, code): + cache_result = tool.CodeDataCacheUtil.get_cache(self.__first_code_data_cache, code) + if cache_result[0]: + return cache_result[1] return None - return json.loads(val) -def __get_first_code_data_cache(code): - cache_result = tool.CodeDataCacheUtil.get_cache(__first_code_data_cache, code) - if cache_result[0]: - return cache_result[1] - val = __get_first_code_data(code) - tool.CodeDataCacheUtil.set_cache(__first_code_data_cache, code, val) - return val +class FirstNoScreenCodesManager: + __instance = None + __redisManager = redis_manager.RedisManager(0) + __db = 0 + __first_no_screen_codes_cache = set() + def __new__(cls, *args, **kwargs): + if not cls.__instance: + cls.__instance = super(FirstNoScreenCodesManager, cls).__new__(cls, *args, **kwargs) + cls.__load_data() + return cls.__instance -# 娣诲姞杩涢鏉挎湭绛涢�夌エ -def __add_first_no_screen_codes(codes): - redis = __redisManager.getRedis() - try: + # 鍔犺浇鏁版嵁 + @classmethod + def __load_data(cls): + codes = RedisUtils.smembers(cls.__get_redis(), "first_no_screen_codes") + cls.__first_no_screen_codes_cache = codes + + @classmethod + def __get_redis(cls): + return cls.__redisManager.getRedis() + + # 娣诲姞杩涢鏉挎湭绛涢�夌エ + def add_first_no_screen_codes(self, codes): + redis = self.__get_redis() if codes: for code in codes: - RedisUtils.sadd(redis, "first_no_screen_codes", code, auto_free=False) - RedisUtils.expire(redis, "first_no_screen_codes", tool.get_expire(), auto_free=False) - finally: - RedisUtils.realse(redis) + self.__first_no_screen_codes_cache.add(code) + RedisUtils.sadd_async(self.__db, "first_no_screen_codes", code, auto_free=False) + RedisUtils.expire_async(self.__db, "first_no_screen_codes", tool.get_expire(), auto_free=False) + def clear_first_no_screen_codes(self): + self.__first_no_screen_codes_cache.clear() + RedisUtils.delete(self.__get_redis(), "first_no_screen_codes") -def clear_first_no_screen_codes(): - RedisUtils.delete(__redisManager.getRedis(), "first_no_screen_codes") - - -def __remove_first_no_screen_codes(codes): - redis = __redisManager.getRedis() - try: + def remove_first_no_screen_codes(self, codes): if codes: for code in codes: - RedisUtils.srem(redis, "first_no_screen_codes", code, auto_free= False) - finally: - RedisUtils.realse(redis) + self.__first_no_screen_codes_cache.discard(code) + RedisUtils.srem_async(self.__db, "first_no_screen_codes", code, auto_free=False) + def __get_first_no_screen_codes(self): + codes = RedisUtils.smembers(self.__get_redis(), "first_no_screen_codes") + if not codes: + return set() + return codes -def __get_first_no_screen_codes(): - codes = RedisUtils.smembers(__get_redis(), "first_no_screen_codes") - if not codes: - return set() - return codes + def get_first_no_screen_codes_cache(self): + return self.__first_no_screen_codes_cache # 澶勭悊ticks鏁版嵁 @@ -85,7 +115,7 @@ for price in prices: code = price["code"] time_ = price["time"] - old_data = __get_first_code_data_cache(code) + old_data = FirstCodeDataManager().get_first_code_data_cache(code) if old_data is None: continue limit_up = price["limit_up"] @@ -99,7 +129,7 @@ old_data[2] = time_ old_data[3] = time_ old_data[4] = limit_up - __save_first_code_data(code, old_data) + FirstCodeDataManager().save_first_code_data(code, old_data) def set_target_no_screen_codes(codes): @@ -112,16 +142,16 @@ del_codes = old_codes - codes_set add_codes = codes_set - old_codes if del_codes: - __remove_first_no_screen_codes(del_codes) + FirstNoScreenCodesManager().remove_first_no_screen_codes(del_codes) if add_codes: # 娣诲姞杩涢鏉挎湭閫夌エ - __add_first_no_screen_codes(add_codes) + FirstNoScreenCodesManager().add_first_no_screen_codes(add_codes) return add_codes # 鑾峰彇棣栨澘鏈瓫閫夌殑鐩爣绁� def get_target_no_screen_codes(): - return __get_first_no_screen_codes() + return FirstNoScreenCodesManager().get_first_no_screen_codes_cache() # 鏄惁闇�瑕佸姞鍏ラ鏉� @@ -152,12 +182,5 @@ return True, "鐐告澘鍚庯紝60鍒嗛挓鍐呴兘鏈洖灏�" if now_rate <= 6: return True, "鐐告澘鍚庯紝娑ㄥ箙灏忎簬6%" - # TODO 鏄惁鏈夊悓姒傚康鐨勭エ宸茬粡涔板叆鎴愬姛 - blocks = block_info.get_code_blocks(code) - if blocks and len(blocks) == 1: - codes = block_info.get_block_codes(blocks[0]) - - if codes: - pass return False, "棣栨澘鐐稿紑鍚庯紝娑ㄥ箙鈮�6%" -- Gitblit v1.8.0