开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (1)
master
master
分支 (1)
master
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (1)
master
python-code
/
pythonApp
/
testDir
/
testSqlite.py
python-code
/
pythonApp
/
testDir
/
testSqlite.py
testSqlite.py 6.57 KB
一键复制 编辑 原始数据 按行查看 历史
linght 提交于 2025年07月21日 23:11 +08:00 . 测试代码.
import json
import threading
import time
from PySide6 import QtCore
from PySide6.QtCore import Signal, QByteArray
from PySide6.QtNetwork import QHostAddress
from loguru import logger
from commonLib.udpComm.udpComm import UdpComm # 你提供的类
class TestSqlite(QtCore.QObject):
dataReceived = Signal(QByteArray, QHostAddress, int) # data, sender IP, port
def __init__(self, parent=None):
super().__init__(parent)
self.udp = UdpComm(self)
self.udp.dataReceived.connect(self.dataReceived)
self.bindUdp()
def bindUdp(self) -> None:
# 绑定任意地址任意端口(0表示系统自动分配)
port = 55666
address = "0.0.0.0"
self.udp.bind(port, address)
logger.info(f"TestSqlite UDP bind to {address}:{port}")
def sendTestMessage(self, ip: str, port: int, message: str):
data = message.encode("utf-8")
self.udp.send_data(data, ip, port)
logger.info(f"Sent test message to {ip}:{port}: {message}")
class TestControllerSqlite(QtCore.QObject):
_uuidCounter = 1
_uuidLock = threading.Lock()
def __init__(self, remoteIp: str, remotePort: int, parent=None):
super().__init__(parent)
self.testSqlite = TestSqlite(self)
self.testSqlite.dataReceived.connect(self.onDataReceived)
self.remoteIp = remoteIp
self.remotePort = remotePort
self.requestMap = {} # uuid: (sendTime, sql)
self.sendCount = 0
# 响应时间分段统计
self.statsBuckets = {
"<10": 0,
"10~20": 0,
"20~30": 0,
"30~40": 0,
"40~50": 0,
"50~80": 0,
"80~100": 0,
">100": 0,
}
@QtCore.Slot(QtCore.QByteArray, QHostAddress, int)
def onDataReceived(self, data, senderIp, senderPort):
msg = data.data().decode("utf-8", errors="ignore") # 解码字节为字符串
# logger.info(f"Received UDP message from {senderIp.toString()}:{senderPort} -> {msg}")
try:
respJson = json.loads(msg)
uuid = str(respJson.get("uuid", ""))
if uuid in self.requestMap:
sendTime, sqlCmd = self.requestMap[uuid]
now = time.time()
delayMs = (now - sendTime) * 1000
logger.info(f"响应时间统计: uuid={uuid}, delay={delayMs:.2f} ms, sql={sqlCmd}")
# 分类统计
if delayMs < 10:
self.statsBuckets["<10"] += 1
elif delayMs < 20:
self.statsBuckets["10~20"] += 1
elif delayMs < 30:
self.statsBuckets["20~30"] += 1
elif delayMs < 40:
self.statsBuckets["30~40"] += 1
elif delayMs < 50:
self.statsBuckets["40~50"] += 1
elif delayMs < 80:
self.statsBuckets["50~80"] += 1
elif delayMs < 100:
self.statsBuckets["80~100"] += 1
else:
self.statsBuckets[">100"] += 1
# 打印 >= 30ms 的日志和统计
if delayMs >= 30:
self.logger.infoStats(uuid, delayMs, sqlCmd)
else:
logger.warning(f"收到未知uuid响应: {uuid}")
except Exception as e:
logger.error(f"解析响应失败: {e}")
# 这里示例回复数据给发送者
# reply_msg = f"ACK: received {len(data)} bytes"
# self.testSqlite.sendTestMessage(senderIp.toString(), senderPort, reply_msg)
# logger.info(f"Sent reply to {senderIp.toString()}:{senderPort}")
def printStats(self, uuid: str, delayMs: float, sqlCmd: str):
total = self.sendCount
statLines = []
for k in self.statsBuckets:
count = self.statsBuckets[k]
percent = (count / total) * 100 if total > 0 else 0
statLines.append(f"{k}: {count} ({percent:.2f}%)")
logger.warning(f"响应时间 ≥30ms:uuid={uuid}, delay={delayMs:.2f}ms 当前统计分布:{statLines} total: {total}, sql={sqlCmd} ")
@classmethod
def buildSqlQueryJson(cls, sqlCmd: str) -> tuple[str, str]:
"""
构建 SQL 查询请求的 JSON 字符串
:param sqlCmd: 要执行的 SQL 命令(字符串)
:return: JSON 字符串
"""
with cls._uuidLock:
uuid = cls._uuidCounter
cls._uuidCounter += 1
data = {"source": "cfgManage", "type": "query", "uuid": str(uuid), "dbName": "drtdRecord", "sqlCmd": sqlCmd, "sqlCmdList": ""}
# return str(uuid), json.dumps(data, ensure_ascii=False, indent=2)
return str(uuid), json.dumps(data, ensure_ascii=False, separators=(",", ":"))
def startTestSendThread(self, gapMs: int) -> None:
def sendSqlReq():
sql_list = [
"SELECT * FROM callRecord WHERE dataReadyStat != dataUploadStat LIMIT 20;",
"SELECT * FROM checkRecord WHERE dataReadyStat != dataUploadStat LIMIT 20;",
"SELECT * FROM loginRecord WHERE dataReadyStat != dataUploadStat LIMIT 20;",
"SELECT * FROM logoutRecord WHERE dataReadyStat != dataUploadStat LIMIT 20;",
"SELECT * FROM orderMsgAckRecord WHERE dataReadyStat != dataUploadStat LIMIT 20;",
"SELECT * FROM orderMsgRecord WHERE dataReadyStat != dataUploadStat LIMIT 20;",
]
while True:
# 每轮发送前5条 SQL(如需轮换/打乱也可扩展)
for sql in sql_list[:5]:
uuid, jsonSql = self.buildSqlQueryJson(sql)
# logger.info(f"发送 SQL 请求: {sql}")
self.requestMap[uuid] = (time.time(), sql)
self.testSqlite.sendTestMessage(self.remoteIp, self.remotePort, jsonSql)
self.sendCount += 1
time.sleep(0.005) # 每条间隔 5ms,避免粘包或过快
# 每轮等待 gapMs 毫秒(默认 5000ms)
time.sleep(gapMs / 1000)
t = threading.Thread(target=sendSqlReq, daemon=True)
t.start()
def getSqlite(self) -> TestSqlite:
return self.testSqlite
_controllerSql = None
def testControllerSql():
global _controllerSql
if _controllerSql is None:
_controllerSql = TestControllerSqlite("192.168.21.15", 49080)
_controllerSql.startTestSendThread(3000)
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

pythonCode
暂无标签
GPL-3.0
使用 GPL-3.0 开源许可协议
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/linght/python-code.git
git@gitee.com:linght/python-code.git
linght
python-code
pythonCode
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /