From fb47d36048e94b9a506d5c153e3dd19a01e37df1 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期一, 30 十月 2023 16:30:27 +0800 Subject: [PATCH] bug修复 --- l2/transaction_progress.py | 76 +++++++++++++++++++++++++++++++------ 1 files changed, 63 insertions(+), 13 deletions(-) diff --git a/l2/transaction_progress.py b/l2/transaction_progress.py index 9f2c099..9e38792 100644 --- a/l2/transaction_progress.py +++ b/l2/transaction_progress.py @@ -5,58 +5,95 @@ # 涔板叆闃熷垪 import itertools import json +import time import constant -from db import redis_manager -import tool +from db import redis_manager_delegate as redis_manager +from db.redis_manager_delegate import RedisUtils +from utils import tool import l2.l2_data_util -from log import logger_l2_trade_buy_queue, logger_l2_trade_buy_progress +from log_module.log import logger_l2_trade_buy_queue, logger_l2_trade_buy_progress class TradeBuyQueue: + buy_progress_index_cache = {} + latest_buy_progress_index_cache = {} + # 鎴愪氦閫熺巼 + trade_speed_cache = {} + + __db = 0 __redis_manager = redis_manager.RedisManager(0) + __instance = None + + def __new__(cls, *args, **kwargs): + if not cls.__instance: + cls.__instance = super(TradeBuyQueue, cls).__new__(cls, *args, **kwargs) + cls.__load_datas() + return cls.__instance def __init__(self): self.last_buy_queue_data = {} - def __getRedis(self): - return self.__redis_manager.getRedis() + @classmethod + def __get_redis(cls): + return cls.__redis_manager.getRedis() + + @classmethod + def __load_datas(cls): + __redis = cls.__get_redis() + try: + keys = RedisUtils.keys(__redis, "trade_buy_progress_index-*") + for k in keys: + code = k.split("-")[-1] + val = RedisUtils.get(__redis, k) + val = json.loads(val) + tool.CodeDataCacheUtil.set_cache(cls.buy_progress_index_cache, code, val) + + finally: + RedisUtils.realse(__redis) def __save_buy_queue_data(self, code, num_list): key = "trade_buy_queue_data-{}".format(code) - self.__getRedis().setex(key, tool.get_expire(), json.dumps((num_list, tool.get_now_time_str()))) + RedisUtils.setex(self.__get_redis(), key, tool.get_expire(), json.dumps((num_list, tool.get_now_time_str()))) # 杩斿洖鏁版嵁涓庢洿鏂版椂闂� def __get_buy_queue_data(self, code): key = "trade_buy_queue_data-{}".format(code) - val = self.__getRedis().get(key) + val = RedisUtils.get(self.__get_redis(), key) if val is None: return None, None val = json.loads(val) return val[0], [1] def __save_buy_progress_index(self, code, index, is_default): + tool.CodeDataCacheUtil.set_cache(self.buy_progress_index_cache, code, (index, is_default)) key = "trade_buy_progress_index-{}".format(code) - self.__getRedis().setex(key, tool.get_expire(), json.dumps((index, is_default))) + RedisUtils.setex_async(self.__db, key, tool.get_expire(), json.dumps((index, is_default))) # 杩斿洖鏁版嵁涓庢洿鏂版椂闂� def __get_buy_progress_index(self, code): key = "trade_buy_progress_index-{}".format(code) - val = self.__getRedis().get(key) + val = RedisUtils.get(self.__get_redis(), key) if val is None: return None, True val = json.loads(val) return int(val[0]), bool(val[1]) + def __get_buy_progress_index_cache(self, code): + cache_result = tool.CodeDataCacheUtil.get_cache(self.buy_progress_index_cache, code) + if cache_result[0]: + return cache_result[1] + return None, True + # 鏈�杩戠殑闈炴定鍋滀拱1鐨勬椂闂� def __save_latest_not_limit_up_time(self, code, time_str): key = "latest_not_limit_up_time-{}".format(code) - self.__getRedis().setex(key, tool.get_expire(), time_str) + RedisUtils.setex(self.__get_redis(), key, tool.get_expire(), time_str) def __get_latest_not_limit_up_time(self, code): key = "latest_not_limit_up_time-{}".format(code) if not constant.TEST: - return self.__getRedis().get(key) + return RedisUtils.get(self.__get_redis(), key) return None # 淇濆瓨鏁版嵁,杩斿洖淇濆瓨鏁版嵁鐨勬潯鏁� @@ -145,12 +182,25 @@ # 鑾峰彇鎴愪氦杩涘害绱㈠紩 def get_traded_index(self, code): - index, is_default = self.__get_buy_progress_index(code) + index, is_default = self.__get_buy_progress_index_cache(code) return index, is_default - def set_traded_index(self, code, index): + # 璁剧疆浜ゆ槗杩涘害 + def set_traded_index(self, code, index, total_datas = None): + last_info = self.latest_buy_progress_index_cache.get(code) + if not last_info or last_info[0] != index: + if last_info: + val = total_datas[last_info[0]]['val'] + rate = round(val["num"] * float(val["price"]) * 100 / (time.time() - last_info[1])) + # 鎴愪氦閫熺巼 + self.trade_speed_cache[code] = rate + self.latest_buy_progress_index_cache[code] = (index, time.time()) self.__save_buy_progress_index(code, index, False) + # 鑾峰彇鎴愪氦閫熺巼 + def get_trade_speed(self, code): + return self.trade_speed_cache.get(code) + if __name__ == '__main__': a = [1, 2, 3, 4] -- Gitblit v1.8.0