pyside6 捕捉主窗口关闭后,进行释放相关的资源

import sys
from PySide6 import QtGui
from PySide6.QtWidgets import QWidget,QApplication,QMessageBox


class Message(QWidget):

    def __init__(self):
        # 如果希望窗口内嵌于其他部件,可添加parent参数
        super(Message, self).__init__()
        # 调用初始化方法
        self.initUI()

    def initUI(self):
        # 设置窗口的所在位置,以左上角为原点,x轴300, y轴300, 宽250, 长150
        self.setGeometry(300, 300, 250, 150)
        # 给窗口一个标题名,你将会在标题栏看到这个名字
        self.setWindowTitle('Message box')

    def closeEvent(self, event):
        # message为窗口标题
        # Are you sure to quit?窗口显示内容
        # QtGui.QMessageBox.Yes | QtGui.QMessageBox.No窗口按钮部件
        # QtGui.QMessageBox.No默认焦点停留在NO上
        reply = QMessageBox.question(self, 'Message',
                                           "Are you sure to quit?",
                                        QMessageBox.Yes |
                                        QMessageBox.No,
                                        QMessageBox.No)
        # 判断返回结果处理相应事项
        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()


def main():
    # 创建qt的主应用
    app = QApplication(sys.argv)
    # 实例化自己写的类
    ex = Message()
    ex.show()
    # 应用关闭时返回0,sys关闭进程
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

原因:sock断开的问题

存在的问题:

效果

通过抓包来验证猜想:

sock 在客户端进程关闭的时候,没有资源释放会导致服务端怎么样?

看下文心的解释:

当客户端进程关闭而其占用的 socket 资源没有正确释放时,这可能会对服务端产生以下影响:

资源泄露:服务端可能继续为已关闭的客户端连接保留资源,如文件描述符、内存等。如果这种情况频繁发生,随着时间的推移,这些未释放的资源可能会累积,最终导致服务端资源耗尽。
性能下降:服务端需要管理更多的“僵尸”连接,这可能会增加其处理开销,导致性能下降。
连接限制:大多数操作系统都有限制单个进程可以打开的文件描述符数量。如果客户端不释放 socket,服务端可能会达到这个限制,无法接受新的连接。
错误处理:服务端可能需要实现额外的逻辑来检测和处理这些“僵尸”连接,增加了复杂性和潜在的错误风险。
不稳定性和崩溃:在极端情况下,如果资源泄露足够严重,服务端进程可能会变得不稳定,甚至崩溃。
为了避免这些问题,建议:

正确关闭连接:确保客户端在关闭时正确关闭和释放所有 socket 资源。
服务端检测:在服务端实现心跳检测或其他机制,以识别和关闭不活动的或已关闭的客户端连接。
资源限制:设置合理的资源限制,如文件描述符的数量,并在达到限制时采取适当的行动,如拒绝新的连接或关闭最旧的连接。
日志和监控:实现日志记录和监控机制,以便及时发现和处理资源泄露问题。

进行实验测试:

1、服务器是telnet,将telnet 服务器设置为单链接状态

2、客户端使用自己写的telnet 进行连接,但是关闭主窗口的时候,不进行telnet sock的释放。

3、预测结果,telnet客户端关闭后,telnet服务器无法在进行登录,但是使用wireshark抓包可以看到tcp/ip连接的发起。

一、第一次正常的连接抓包显示,是正常的登录和交互:

二、对客户端进行不释放任何资源的关闭:

可以观察到 抓包软件中是没有任何报文交互的,没有tcp的四次挥手离开。这样对于telnet的服务来说,客户端是凭空消失了,并且服务器不知道客户端已经消失了。

三、在次发起telnet 客户端的连接,查看报文交互

在客户端断开一段时间后,tcp./ip进行了交互

四、在重复一下实验,在tcp没有自挥手前,进行tcp的连接

此时连接就会出现问题

五、等待一下,需要多久 telnet服务器可以恢复过来。

目前实验结果是符合猜想的,现在停止连接连接的过程,查看服务器主动释放在什么时候。

在大概四分钟的时候,服务器主动进行了资源的释放

接下来:需要查看telent服务器的设计,进行一个问题的总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/313896.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分块矩阵的定义、计算

目录 一、定义 二、分块矩阵的加减乘法 三、考点 一、定义 分块,顾名思义,将整个矩阵分成几部分,如下图所示 二、分块矩阵的加减乘法 三、考点 分块矩阵的考点不多,一般来说,有一种: 求分块矩阵的转置…

伐木工 - 华为OD统一考试

OD统一考试 题解: Java / Python / C++ 题目描述 一根X米长的树木,伐木工切割成不同长度的木材后进行交易,交易价格为每根木头长度的乘积。规定切割后的每根木头长度都为正整数,也可以不切割,直接拿整根树木进行交易。请问伐木工如何尽量少的切割,才能使收益最大化? 输…

如何在 openKylin 上安装 ONLYOFFICE 文档?

文章作者:ajun ONLYOFFICE 文档是一款全面的在线办公工具,提供了文本文档、电子表格和演示文稿的查看和编辑功能。它高度兼容微软 Office 格式,包括 .docx、.xlsx 和 .pptx 等文件格式,并支持实时协作编辑,使团队成员能…

P5736 【深基7.例2】质数筛题解

题目 输入n个不大于105的正整数。要求全部储存在数组中,去除掉不是质数的数字,依次输出剩余的质数。 输入输出格式 输入格式 第一行输入一个正整数n,表示整数个数。 第二行输入n个正整数,以空格隔开。 输出格式 输出一行&a…

2024年MIA最新生成综述:基于深度学习的MRI/CT/PET合成【文献阅读】

2024年MIA最新生成综述:基于深度学习的MRI/CT/PET合成【文献阅读】 基本信息 标题:Deep learning based synthesis of MRI, CT and PET: Review and analysis发表年份: 2024期刊/会议: Medical Image Analysis分区: SCI 1区IF:1…

【Python机器学习】深度学习——调参

先用MLPClassifier应用到two_moons数据集上: from sklearn.neural_network import MLPClassifier from sklearn.datasets import make_moons from sklearn.model_selection import train_test_split import mglearn import matplotlib.pyplot as pltplt.rcParams[f…

2D绘图--视口窗口setViewport setWindow

目录 1 setViewport setWindow 2 示例 3 实际应用(个人理解) 4 总结 1 setViewport setWindow 在Qt中,QPainter的setViewport()方法用于定义绘图区域在窗口坐标系中的可视部分。 QPainter::setWindow() 是 Qt 库中 QPainter 类的一个方法…

字体包大小缩小的软件

Fontmin - 字体子集化方案https://ecomfe.github.io/fontmin/#app

Talk|南洋理工大学王谭:DisCo-基于解耦控制的现实人物舞蹈生成及相关工作梳理

本期为TechBeat人工智能社区第563期线上Talk。 北京时间1月11日(周四)20:00,南洋理工大学博士生—王谭的Talk已准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “DisCo-基于解耦控制的现实人物舞蹈生成及相关工作梳理”,介绍了他的团…

服务器架构演进史

服务器架构演进史 概述 在进行后端的学习过程中,有时由于个人的学习广度的局限导致无法从全局理解一些概念,服务端的架构的演进历史,同时列举出每个演进阶段会遇到的相关技术,让对架构的演进有一个整体的认知。并帮助读者与本人…

考研英语高频打卡

高频词汇13——15抽背答案 1、colleague /ˈkɒliːɡ/ 考频20(英一12 次,英二8 次) n. 同事,同僚 2、despite /dɪˈspaɪt/ 考频19(英一12 次,英二7 次) prep. 不管,不顾 3、overa…

SwiftUI 为任意视图加上徽章(Badge)而想到的(上)

概览 在小伙伴们看来为 SwiftUI 视图添加徽章是一件轻松愉快的“消遣”,几乎不费吹灰之力。但随着需求的升级实现难度可能会“陡然而升”。 从上面演示图中可以看到:无论徽章中的数字是多少、无论徽章采用什么样的偏移方式,徽章的显示都“得体大方、游刃有余”,这是怎么做…

asp.net core项目发布到 iis上

我们都知道与传统asp.net 项目比较,ASP.NET Core则完全不同,它并不是运行在IIS的工作进程中,而是独立运行的。它运行于控制台应用程序之中,控制台中则运行了Kestrel Web服务器组件。Kestrel作为一款.NET Web服务器的实现&#xff…

2024年甘肃省职业院校技能大赛信息安全管理与评估 样题二 模块二

竞赛需要完成三个阶段的任务,分别完成三个模块,总分共计 1000分。三个模块内容和分值分别是: 1.第一阶段:模块一 网络平台搭建与设备安全防护(180 分钟,300 分)。 2.第二阶段:模块二…

少儿编程 中国电子学会图形化编程2023年12月等级考试Scratch二级真题解析(选择题、判断题)

一、选择题:共25小题,每题2分,共50分 1.在制作推箱子游戏时,地图是用数字形式储存在电脑里的,下图是一个推箱子地图,地图表示如下: 第一行 (111111) 第二行(132231) 第三行(126621)第四行(第五…

AnyText多语言文字生成与编辑模型——让AI绘图自由添加精美文字

随着AIGC的爆火,图片生成技术得到飞速发展,当前AI生成的图片已达到真假难辨的高保真度。例如stable diffusion与midjourney为代表的文生图大模型。不过,当合成图片中出现文字内容时,现存的AI技术依然无法驾驭文字内容。因此,modescope提出了一种新型的文字生成方法,此方法…

stl中的list模拟实现

目录 一、list的简单介绍二、写出节点的代码三、模拟实现迭代器(重点)1、list中的迭代器是怎么实现的2、编写iterator类的代码3、对const_iterator进行理解4、编写const_iterator类的代码5、对iterator类和const_iterator类进行合并 四、list类进行代码实…

MC-4/11/10/400​什么是电机驱动器。​

MC-4/11/10/400​什么是电机驱动器。​ 首先,我们先来了解以下两个主题,这会帮助我们了解什么是电机驱动器。 电机驱动器IC的作用 电机驱动器IC与电机设备之间的关系 电机驱动器的作用 用来使电机旋转(驱动电机)的集成电路&…

d2l动手学深度学习】 Lesson 13 Dropout层 老板随机丢掉一些做项目的程序员‍,项目的效果会更好!(bushi)

文章目录 1. 什么是Dropout老板随机丢掉一些做项目的程序员🧑‍💻,项目的效果会更好! 2. 代码实现(不用torch)3. 代码实现(使用torch)3. 调节实验3.1 老师上课所设置的dropout1, dro…

【二十】【动态规划】879. 盈利计划、377. 组合总和 Ⅳ、96. 不同的二叉搜索树 ,三道题目深度解析

动态规划 动态规划就像是解决问题的一种策略,它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题,并将每个小问题的解保存起来。这样,当我们需要解决原始问题的时候,我们就可以直接利…
最新文章