From 1d7c2ebb355b8d511c7b2efd1555ae7842b0866d Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 16 May 2025 10:59:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20get=5Ftyy=5Fdata=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/em/cd.py | 52 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/apps/em/cd.py b/apps/em/cd.py index 44779f1e..76eb04fc 100644 --- a/apps/em/cd.py +++ b/apps/em/cd.py @@ -1,26 +1,42 @@ import socket from rest_framework.exceptions import ParseError import json +import time def get_tyy_data(*args): - sc = socket.socket() - try: - sc.connect((args[0], int(args[1]))) - except Exception: - raise ParseError("无法连接到采集器") - sc.send(b"R") - resp = sc.recv(1024) - if len(resp) < 8: - raise ParseError("设备未启动") - try: - json_data = resp[5:-4] - json_str = json_data.decode('utf-8') - res = json.loads(json_str) - except Exception: - raise - finally: - sc.close() - return res + host, port = args[0], args[1] + max_retries = 3 + retry_delay = 0.5 + + for attempt in range(max_retries): + sc = None + try: + sc = socket.socket() + sc.connect((host, int(port))) + sc.sendall(b"R") + resp = sc.recv(1024) + if not resp: + raise ParseError("采集器返回空数据") + if len(resp) < 8: + raise ParseError("设备未启动") + json_data = resp[5:-4] + json_str = json_data.decode('utf-8') + res = json.loads(json_str) + return res + except ConnectionResetError: + if attempt == max_retries - 1: + raise ParseError("采集器重置了连接,重试次数已达上限") + time.sleep(retry_delay) + except socket.timeout: + raise ParseError("采集器连接超时") + except Exception as e: + raise ParseError(f"未知错误: {str(e)}") + finally: + if sc: + try: + sc.close() + except Exception: + pass if __name__ == '__main__': print(get_tyy_data()) \ No newline at end of file