Administrator
2023-08-08 ba2f7b998e5e3f6223c11e804c7922a8070426a0
trade/trade_data_manager.py
@@ -155,22 +155,40 @@
# 代码实时价格管理器
class CodeActualPriceProcessor:
    __under_water_last_time_cache = {}
    __code_current_rate_cache = {}
    __code_current_rate_latest = {}
    __db = 0
    __redisManager = redis_manager.RedisManager(0)
    __instance = None
    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            cls.__instance = super(CodeActualPriceProcessor, cls).__new__(cls, *args, **kwargs)
            # 初始化设置
            # 获取交易窗口的锁
            cls.__instance.__redisManager = redis_manager.RedisManager(0)
            cls.__instance.__under_water_last_time_cache = {}
            cls.__instance.__code_current_rate_cache = {}
            cls.__instance.__code_current_rate_latest = {}
            cls.__load_datas()
        return cls.__instance
    def __get_redis(self):
        return self.__redisManager.getRedis()
    @classmethod
    def __get_redis(cls):
        return cls.__redisManager.getRedis()
    @classmethod
    def __load_datas(cls):
        __redis = cls.__get_redis()
        try:
            keys = RedisUtils.keys(__redis, "under_water_last_time-*")
            for k in keys:
                code = k.split("-")[-1]
                val = RedisUtils.get(__redis, k)
                tool.CodeDataCacheUtil.set_cache(cls.__under_water_last_time_cache, code, val)
            keys = RedisUtils.keys(__redis, "code_current_rate-*")
            for k in keys:
                code = k.split("-")[-1]
                val = RedisUtils.get(__redis, k)
                tool.CodeDataCacheUtil.set_cache(cls.__code_current_rate_cache, code, float(val))
        finally:
            RedisUtils.realse(__redis)
    # 保存跌价的时间
    def __save_down_price_time(self, code, time_str):
@@ -191,9 +209,7 @@
        cache_result = tool.CodeDataCacheUtil.get_cache(self.__under_water_last_time_cache, code)
        if cache_result[0]:
            return cache_result[1]
        val = self.__get_last_down_price_time(code)
        tool.CodeDataCacheUtil.set_cache(self.__under_water_last_time_cache, code, val)
        return val
        return None
    def __increment_down_price_time(self, code, seconds):
        key = "under_water_seconds-{}".format(code)
@@ -234,7 +250,7 @@
        self.__code_current_rate_latest[code] = rate
        tool.CodeDataCacheUtil.set_cache(self.__code_current_rate_cache, code, rate)
        key = "code_current_rate-{}".format(code)
        RedisUtils.setex(self.__get_redis(), key, tool.get_expire(), rate)
        RedisUtils.setex_async(self.__db, key, tool.get_expire(), rate)
    # 批量保存
    def __save_current_rates(self, datas):
@@ -261,9 +277,7 @@
        cache_result = tool.CodeDataCacheUtil.get_cache(self.__code_current_rate_cache, code)
        if cache_result[0]:
            return cache_result[1]
        val = self.__get_current_rate(code)
        tool.CodeDataCacheUtil.set_cache(self.__code_current_rate_cache, code, val)
        return val
        return None
    def process_rate(self, code, rate, time_str):
        # 保存目前的代码涨幅