From f03eb72394a3fac097bb3ab1f956a83f99f7bd0e Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期四, 03 十一月 2022 17:11:37 +0800 Subject: [PATCH] 优化撤单与动态m值计算 --- gpcode_manager.py | 65 +++++++++++++++++++++++++------- 1 files changed, 50 insertions(+), 15 deletions(-) diff --git a/gpcode_manager.py b/gpcode_manager.py index 3c6c24c..bb59007 100644 --- a/gpcode_manager.py +++ b/gpcode_manager.py @@ -1,6 +1,7 @@ """ 鑲$エ浠g爜绠$悊鍣� """ +import code import json import random import time @@ -132,6 +133,7 @@ return None return tool.to_price(decimal.Decimal(str(price)) * decimal.Decimal("1.1")) + # 鑾峰彇璺屽仠浠� def get_limit_down_price(code): price = get_price_pre(code) @@ -180,6 +182,38 @@ def set_listen_code_by_pos(client_id, pos, code): redis_instance = __redisManager.getRedis() redis_instance.setex("listen_code-{}-{}".format(client_id, pos), tool.get_expire(), code) + # 鍚屾鐩戝惉鐨勪唬鐮侀泦鍚� + __sync_listen_codes_pos() + + +# 鍚屾鐩戝惉浠g爜浣嶇疆淇℃伅 +def __sync_listen_codes_pos(): + # 鑾峰彇宸茬粡姝e湪鐩戝惉鐨勪唬鐮� + keys = redis_instance.keys("code_listen_pos-*") + codes_set = set() + for key in keys: + codes_set.add(key.replace("code_listen_pos-", "")) + + keys = redis_instance.keys("listen_code-*-*") + + for key in keys: + result = redis_instance.get(key) + if result: + # 绉婚櫎闇�瑕佹坊鍔犵殑浠g爜 + codes_set.discard(result) + client_id_, pos_, code_ = int(key.split("-")[1]), int(key.split("-")[2]), result + key_ = "code_listen_pos-{}".format(code_) + val = redis_instance.get(key_) + if val is None: + redis_instance.setex(key_, tool.get_expire(), json.dumps((client_id_, pos_))) + else: + val = json.loads(val) + if val[0] != client_id_ or val[1] != pos_: + redis_instance.setex(key_, tool.get_expire(), json.dumps((client_id_, pos_))) + + # 绉婚櫎娌℃湁鐩戝惉鐨勪唬鐮� + for code_ in codes_set: + redis_instance.delete(code_) # 鍒濆鍖栦綅缃� @@ -227,18 +261,23 @@ # 鑾峰彇姝e湪鐩戝惉鐨勪唬鐮佺殑浣嶇疆 def get_listen_code_pos(code): redis_instance = __redisManager.getRedis() - keys = redis_instance.keys("listen_code-*-*") - for key in keys: - result = redis_instance.get(key) - if result is not None and code == result: - return key.split("-")[1], key.split("-")[2] - return None, None + val = redis_instance.get("code_listen_pos-{}".format(code)) + if val is None: + return None, None + val = json.loads(val) + return val[0], val[1] # 鏄惁姝e湪鐩戝惉 def is_listen(code): - codes = get_listen_codes() - return codes.__contains__(code) + redis_instance = __redisManager.getRedis() + val = redis_instance.get("code_listen_pos-{}".format(code)) + if val is None: + return False + else: + return True + # codes = get_listen_codes() + # return codes.__contains__(code) # 鐩戝惉鏄惁婊′簡 @@ -267,10 +306,6 @@ if __name__ == '__main__': - # print(get_can_listen_pos(0)) - # print(get_listen_codes()) - # print(is_listen_full()) - # print(is_listen("002271")) - # print(get_listen_code_pos("002272")) - code = get_listen_code_by_pos(2, 7) - print(code) + _start = time.time() + is_listen("002703") + print( (time.time() - _start) * 1000) -- Gitblit v1.8.0