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

这篇具有很好参考价值的文章主要介绍了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断开的问题

存在的问题:

效果

pyside6 捕捉主窗口关闭后,进行释放相关的资源,python,计算机网络,python,开发语言

通过抓包来验证猜想:

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

看下文心的解释:

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

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

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

进行实验测试:

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

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

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

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

pyside6 捕捉主窗口关闭后,进行释放相关的资源,python,计算机网络,python,开发语言

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

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

pyside6 捕捉主窗口关闭后,进行释放相关的资源,python,计算机网络,python,开发语言

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

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

pyside6 捕捉主窗口关闭后,进行释放相关的资源,python,计算机网络,python,开发语言

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

此时连接就会出现问题

pyside6 捕捉主窗口关闭后,进行释放相关的资源,python,计算机网络,python,开发语言

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

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

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

pyside6 捕捉主窗口关闭后,进行释放相关的资源,python,计算机网络,python,开发语言

接下来:需要查看telent服务器的设计,进行一个问题的总结文章来源地址https://www.toymoban.com/news/detail-806850.html

到了这里,关于pyside6 捕捉主窗口关闭后,进行释放相关的资源的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Pyside6:加载.ui

    通常来说开发Qt的界面基本都在Qt Designer中进行的,它保存的文件为.ui,我们可以通过uic将其转变为.py文件(如何使用:Pyside6:安装及Pycharm配置_pyside6安装pycharm-CSDN博客)。 那么该如何进行加载呢?大致来说有两种方法: 这个非常简单,无需把.ui文件进行转换,但 loader.loa

    2024年02月03日
    浏览(43)
  • pycharm添加pyside6插件

    前言: 在提到python的可视化界面时,很多朋友第一时间想到的可能是pyqt5,毕竟它在网络的知名度比较高,很多技术文章都用的是pyqt5,微智启工作室在最开始接触可视化界面的时候,也是接触的pyqt5,但是随着学习的深入,才直到pyqt5的许可制度限制比较高。 而pyside6的功能

    2024年04月26日
    浏览(31)
  • Pyside6 安装和简单界面开发

    对于Python的GUI开发来说,Python自带的可视化编程模块的功能较弱,PySide是跨平台应用程序框架Qt的Python绑定,Qt是跨平台C++图形可视化界面应用开发框架,自推出以来深受业界盛赞。PySide由Qt公司自己维护,允许用户在Python环境下利用Qt开发大型复杂GUI。用Python简洁的语法调用

    2024年02月07日
    浏览(44)
  • PySide6 QComboBox 组合下拉框

    QComboBox 组合下拉框 QComboBox控件是按钮和弹出式列表的结合,用于在很小的控件内为用户提供多个选项 组合框是一个显示当前项目的选择小部件,可以弹出可选择项目的列表。 组合框可以是可编辑的,允许用户修改列表中的每个项目。 QComboBox 除了显示可见下拉列表外,每个

    2024年02月15日
    浏览(117)
  • Python Qt PySide6简介

    自今天起开学学习教程,有网页介绍,有视频,非常的详细。 现将主要内容摘录如下: (结合自己的实际情况,略有增删和变动)(采用边实践边写的模式) 如果用  Python  语言开发  跨平台  的图形界面的程序,主要有3种选择: Tkinter 基于Tk的Python库,这是Python官方采用

    2024年02月14日
    浏览(49)
  • Pyside6在Pycharm下安装和使用

    目录 一:安装 二:使用 一:安装 打开Pycharm编辑器,file-setting里Python解释器,点击小+号,添加模块,搜索Pyside6,安装 安装报错,可能是默认的库安装超时,用其他的源 pip install Pyside6 -i https://pypi.tuna.tsinghua.edu.cn/simple 安装成功 二:使用 建立一个窗口: import sys from PySide6.Q

    2024年01月23日
    浏览(59)
  • PyCharm下安装配置PySide6开发环境

    PyCharm下安装配置PySide6开发环境(Qt Designer、PyUIC和PyRCC) QtDesigner官网地址:https://build-system.fman.io/qt-designer-download pip install PySide6 配置Qt Designer 运行 Pycharm,Settings–Tools–External Tools 点击 +,添加 QtDesigner 添加 QtDesigner 名称:QtDesigner (新建) 程序:Pyside6-Designer的安装路径。W:

    2024年02月13日
    浏览(52)
  • 【PySide6】QChart笔记(二)—— QBarSeries的使用

    https://doc.qt.io/qtforpython-6/PySide6/QtCharts/QBarSeries.html 【译注:官方文档内容过于简洁,表明完全仅继承了QAbstractBarSeries,且没有扩展任何属性、方法和信号。因此,直接参考QAbstractBarSeries的文档:】 https://doc.qt.io/qtforpython-6/PySide6/QtCharts/QAbstractBarSeries.html 在条形图中,条形被定义

    2024年02月05日
    浏览(47)
  • PySide6 Widgets基本小部件类--QWidget

    没有父小部件的小部件始终是一个独立的窗口(顶级小部件)。对于这些小部件,setWindowTitle() 和 setWindowIcon() 分别设置标题栏和图标。

    2024年02月04日
    浏览(52)
  • PySide6学习/教程/笔记(二):弹窗小页面

    注:本文示例都是从官方文档中找到的,有条件的可以去看一下。 首先,我们看一下,Qt应用最简单的结构是什么样。 一行一行解释。 前两行是导入需要使用的包。这个后面再讲。 app = QApplication(sys.argv) 这行代码创建了一个QApplication类的实例。首先什么是QApplication?回答这

    2024年02月02日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包