From e7f8c6013d777dd5ba10b8d548d2d3db6158d37a Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期四, 08 九月 2022 17:04:27 +0800 Subject: [PATCH] '完善' --- server.py | 115 ++++++++++++++++++++++++++++++--------------------------- 1 files changed, 61 insertions(+), 54 deletions(-) diff --git a/server.py b/server.py index 2978180..06a4e6a 100644 --- a/server.py +++ b/server.py @@ -2,6 +2,7 @@ import logging import socketserver import socket +import threading import time import data_process @@ -66,58 +67,60 @@ __start_time = round(time.time() * 1000) # level2鐩樺彛鏁版嵁 day, client, channel, code, datas = l2_data_manager.parseL2Data(_str) + cid, pid = gpcode_manager.get_listen_code_pos(code) + # 鍒ゆ柇鐩爣浠g爜浣嶇疆鏄惁涓庝笂浼犳暟鎹綅缃竴鑷� + if cid is not None and pid is not None and client == int(cid) and channel == int(pid): + try: + # print("L2鏁版嵁鎺ュ彈",day,code,len(datas)) + # 鏌ヨ + code_ = gpcode_manager.get_listen_code_by_pos(client, channel) + if code_ != code: + key = "{}-{}-{}".format(client, channel, code) - try: - # print("L2鏁版嵁鎺ュ彈",day,code,len(datas)) - # 鏌ヨ - code_ = gpcode_manager.get_listen_code_by_pos(client, channel) - if code_ != code: - key = "{}-{}-{}".format(client, channel, code) + # 闂撮殧2s + if key not in self.reset_code_dict or round( + time.time() * 1000) - self.reset_code_dict[key] > 2000: - # 闂撮殧2s - if key not in self.reset_code_dict or round( - time.time() * 1000) - self.reset_code_dict[key] > 2000: + self.l2CodeOperate.set_operate_code_state(client, channel, 0) + self.reset_code_dict[key] = round(time.time() * 1000) + if code_ is None: + code_ = "" + if tool.is_trade_time(): + self.l2CodeOperate.repaire_operate(int(client), int(channel), code_) + else: + key = "{}-{}".format(client, channel) + if key not in self.set_operate_code_state_dict or round( + time.time() * 1000) - self.set_operate_code_state_dict[key] > 1000: + self.set_operate_code_state_dict[key] = round(time.time() * 1000) + self.l2CodeOperate.set_operate_code_state(client, channel, 1) - self.l2CodeOperate.set_operate_code_state(client, channel, 0) - self.reset_code_dict[key] = round(time.time() * 1000) - if code_ is None: - code_ = "" - if tool.is_trade_time(): - self.l2CodeOperate.repaire_operate(int(client), int(channel), code_) - else: - key = "{}-{}".format(client, channel) - if key not in self.set_operate_code_state_dict or round( - time.time() * 1000) - self.set_operate_code_state_dict[key] > 1000: - self.set_operate_code_state_dict[key] = round(time.time() * 1000) - self.l2CodeOperate.set_operate_code_state(client, channel, 1) + if gpcode_manager.is_listen(code): + l2_data_manager.process_data(code, datas) + except l2_data_manager.L2DataException as l: + # 鍗曚环涓嶇 + if l.get_code() == l2_data_manager.L2DataException.CODE_PRICE_ERROR: + key = "{}-{}-{}".format(client, channel, code) + if key not in self.l2_data_error_dict or round( + time.time() * 1000) - self.l2_data_error_dict[key] > 10000: + # self.l2CodeOperate.repaire_l2_data(code) + # todo 澶晱鎰熺Щ闄や唬鐮� + logger_l2_error.warning("code-{} l2鍗曚环閿欒:{}", code, l.msg) + # 鍗曚环涓嶄竴鑷存椂闇�瑕佺Щ闄や唬鐮侀噸鏂版坊鍔� + l2_code_operate.L2CodeOperate().remove_l2_listen(code) + self.l2_data_error_dict[key] = round(time.time() * 1000) - if gpcode_manager.is_listen(code): - l2_data_manager.process_data(code, datas) - except l2_data_manager.L2DataException as l: - # 鍗曚环涓嶇 - if l.get_code() == l2_data_manager.L2DataException.CODE_PRICE_ERROR: - key = "{}-{}-{}".format(client, channel, code) - if key not in self.l2_data_error_dict or round( - time.time() * 1000) - self.l2_data_error_dict[key] > 2000: - self.l2CodeOperate.repaire_l2_data(code) - self.l2_data_error_dict[key] = round(time.time() * 1000) - - except Exception as e: - print("寮傚父", str(e)) - logging.exception(e) - logger_l2_error.error("鍑洪敊锛歿}".format(str(e))) - logger_l2_error.error("鍐呭锛歿}".format(_str)) - finally: - __end_time = round(time.time() * 1000) - # 鍙褰曞ぇ浜�40ms鐨勬暟鎹� - if __end_time - __start_time > 40: - logger_l2_process.info("l2澶勭悊鏃堕棿锛歿}-{}".format(code, __end_time - __start_time)); + except Exception as e: + print("寮傚父", str(e)) + logging.exception(e) + logger_l2_error.error("鍑洪敊锛歿}".format(str(e))) + logger_l2_error.error("鍐呭锛歿}".format(_str)) + finally: + __end_time = round(time.time() * 1000) + # 鍙褰曞ぇ浜�40ms鐨勬暟鎹� + if __end_time - __start_time > 40: + logger_l2_process.info("l2澶勭悊鏃堕棿锛歿}-{}".format(code, __end_time - __start_time)); except: pass - - - - elif type == 10: # level2浜ゆ槗闃熷垪 try: @@ -126,7 +129,6 @@ data_process.saveL2Data(day, code, setData) except: print("寮傚父") - elif type == 1: # 璁剧疆鑲$エ浠g爜 data_list = data_process.parseGPCode(_str) @@ -138,7 +140,10 @@ gpcode_manager.set_gp_list(code_list) # 閲嶆柊璁㈤槄 self.server.pipe.send(json.dumps({"type": "resub"})) - sync_target_codes_to_ths() + # 鍚屾鍚岃姳椤虹洰鏍囦唬鐮� + t1 = threading.Thread(target=lambda: sync_target_codes_to_ths()) + t1.setDaemon(True) + t1.start() elif type == 2: # 娑ㄥ仠浠g爜 codeList = data_process.parseGPCode(_str) @@ -185,17 +190,18 @@ {"code": 0, "data": {"client": int(client_id), "authoritys": json.loads(_authoritys)}}) except Exception as e: return_str = data_process.toJson({"code": 1, "msg": str(e)}) + # 鐜颁环鏇存柊 elif type == 40: data = data_process.parse(_str)["data"] - for item in data: - juejin.accpt_price(item["code"], float(item["price"])) + if data is not None: + print("鐜颁环鏁伴噺", len(data)) + for item in data: + juejin.accpt_price(item["code"], float(item["price"])) elif type == 30: data = data_process.parse(_str)["data"] client_id = data["client"] - if "memery" in data: - mem = data["memery"] - logger_device.info("锛坽}锛夊唴瀛樹娇鐢ㄧ巼锛歿}".format(client_id, mem)) + logger_device.info("锛坽}锛夊鎴风淇℃伅锛歿}".format(client_id, json.dumps(data))) data_process.saveClientActive(int(client_id), host) # print("蹇冭烦锛�", client_id) @@ -235,7 +241,8 @@ send_msg(client, {"action": "test"}) except: pass - + # 鐭瀹㈡埛绔唬鐮� + l2_code_operate.correct_client_codes() time.sleep(5) -- Gitblit v1.8.0