From b7000cbf5e67e90abe53e96a4ea931afbf906e24 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期五, 16 九月 2022 18:51:47 +0800 Subject: [PATCH] l2数据计算优化 --- l2_data_util.py | 55 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 46 insertions(+), 9 deletions(-) diff --git a/l2_data_util.py b/l2_data_util.py index 22554f4..726028b 100644 --- a/l2_data_util.py +++ b/l2_data_util.py @@ -1,6 +1,13 @@ # l2鏁版嵁宸ュ叿 # 姣旇緝鏃堕棿鐨勫ぇ灏� +import hashlib import json +import time + +import l2_data_manager +import tool +from log import logger_l2_trade, logger_l2_big_data +from trade_gui import async_call def compare_time(time1, time2): @@ -56,7 +63,6 @@ return time_seconds - # 璁$畻鏃堕棿鐨勫尯闂� def __compute_time_space_as_second(cancel_time, cancel_time_unit): __time = int(cancel_time) @@ -75,21 +81,51 @@ # 鏍规嵁涔版挙鏁版嵁(涓庝粖鏃ユ�荤殑鏁版嵁)璁$畻涔板叆鏁版嵁 -def get_buy_data_with_cancel_data(cancel_data, today_datas): +def get_buy_data_with_cancel_data(cancel_data): # 璁$畻鏃堕棿鍖洪棿 min_space, max_space = __compute_time_space_as_second(cancel_data["val"]["cancelTime"], cancel_data["val"]["cancelTimeUnit"]) max_time = __sub_time(cancel_data["val"]["time"], min_space) min_time = __sub_time(cancel_data["val"]["time"], max_space) - - for data in today_datas: + buy_datas = l2_data_manager.local_today_num_operate_map.get("{}-{}".format(cancel_data["val"]["num"], "0")) + if buy_datas is None: + # 鏃犳暟鎹� + return None, None + for i in range(0, len(buy_datas)): + data = buy_datas[i] if int(data["val"]["operateType"]) != 0: continue if int(data["val"]["num"]) != int(cancel_data["val"]["num"]): continue if compare_time(data["val"]["time"], min_time) > 0 and compare_time(data["val"]["time"], max_time) <= 0: - return data - return None + return data["index"], data + return None, None + + +__last_big_data = {} + + +@async_call +def save_big_data(code, same_time_nums, datas): + latest_datas = __last_big_data.get(code) + d1 = json.dumps(datas) + d2 = json.dumps(latest_datas) + if latest_datas is not None and d1.strip() == d2.strip(): + return None + __last_big_data[code] = datas + # 鑾峰彇涓嶄竴鏍风殑蹇収 + if latest_datas is not None: + for i in range(len(d1)): + if d1[i] != d2[i]: + # 淇濆瓨蹇収 + logger_l2_big_data.debug("code:{} d1:{} d2:{}", code, d1[i - 60: i + 30], d2[i - 60: i + 30]) + break + + for key in same_time_nums: + if same_time_nums[key] > 20: + redis = l2_data_manager._redisManager.getRedis() + redis.setex("big_data-{}-{}".format(code, int(round(time.time() * 1000))), tool.get_expire(), d1) + break def test(datas): @@ -101,6 +137,7 @@ # today_datas=[{"val": {"operateType": 1, "num": 1520, "cancelTime": 1, "cancelTimeUnit": 0, "time": "09:32:30"}},{"val": {"operateType": 0, "num": 1520, "cancelTime": 0, "cancelTimeUnit": 0, "time": "09:31:31"}}] # result= get_buy_data_with_cancel_data(cancel_data,today_datas) # print(result) - __datas = {} - test(__datas) - print(__datas) + redis = l2_data_manager._redisManager.getRedis() + keys = redis.keys("big_data-*") + for k in keys: + redis.delete(k) -- Gitblit v1.8.0