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 | 143 ++++++++++++++++++++++++++++++----------------- 1 files changed, 92 insertions(+), 51 deletions(-) diff --git a/code_attribute/gpcode_first_screen_manager.py b/code_attribute/gpcode_first_screen_manager.py index 5bc3366..a1ef0c2 100644 --- a/code_attribute/gpcode_first_screen_manager.py +++ b/code_attribute/gpcode_first_screen_manager.py @@ -5,61 +5,109 @@ # 璁剧疆棣栨澘鏈瓫閫夌殑鐩爣绁� import json -from db.redis_manager import RedisUtils +from db.redis_manager_delegate import RedisUtils from utils import tool -from db import redis_manager -from third_data import block_info - -__redisManager = redis_manager.RedisManager(0) +from db import redis_manager_delegate as redis_manager -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 -# 淇濆瓨棣栨澘绁ㄧ殑鏁版嵁 -# 1.棣栨娑ㄥ仠鏃堕棿 -# 2.鏈�杩戞定鍋滄椂闂� -# 3.棣栨鐐稿紑鏃堕棿 -# 4.鏈�杩戠偢寮�鏃堕棿 -# 5.鏄惁宸茬粡娑ㄥ仠 -def __save_first_code_data(code, data): - RedisUtils.setex(__redisManager.getRedis(), f"first_code_data-{code}", tool.get_expire(), json.dumps(data)) + # 鍔犺浇鏁版嵁 + @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() -def __get_first_code_data(code): - val = RedisUtils.get(__get_redis(), f"first_code_data-{code}") - if val is None: + # 淇濆瓨棣栨澘绁ㄧ殑鏁版嵁 + # 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_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 __add_first_no_screen_codes(codes): - redis = __redisManager.getRedis() - if codes: - for code in codes: - RedisUtils.sadd(redis, "first_no_screen_codes", code) - RedisUtils.expire(redis, "first_no_screen_codes", tool.get_expire()) +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 clear_first_no_screen_codes(): - redis = __redisManager.getRedis() - RedisUtils.delete(redis, "first_no_screen_codes") + # 鍔犺浇鏁版嵁 + @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 __remove_first_no_screen_codes(codes): - redis = __redisManager.getRedis() - if codes: - for code in codes: - RedisUtils.srem(redis, "first_no_screen_codes", code) + # 娣诲姞杩涢鏉挎湭绛涢�夌エ + def add_first_no_screen_codes(self, codes): + redis = self.__get_redis() + if codes: + for code in codes: + 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 __get_first_no_screen_codes(): - codes = RedisUtils.smembers(__get_redis(), "first_no_screen_codes") - if not codes: - return set() - return codes + def remove_first_no_screen_codes(self, codes): + if codes: + for code in codes: + 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_cache(self): + return self.__first_no_screen_codes_cache # 澶勭悊ticks鏁版嵁 @@ -67,7 +115,7 @@ for price in prices: code = price["code"] time_ = price["time"] - old_data = __get_first_code_data(code) + old_data = FirstCodeDataManager().get_first_code_data_cache(code) if old_data is None: continue limit_up = price["limit_up"] @@ -81,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): @@ -94,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() # 鏄惁闇�瑕佸姞鍏ラ鏉� @@ -134,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