| | |
| | | |
| | | # 代码实时价格管理器 |
| | | 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): |
| | |
| | | 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) |
| | |
| | | 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): |
| | |
| | | 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): |
| | | # 保存目前的代码涨幅 |