1、基于python多进程+pyqt5开发流畅界面程序

简介: 使用python+pyqt5开发界面程序,利用多进程分离界面和任务执行功能,达到界面流畅不卡顿的要求。本文程序示例:https://github.com/AlvinsFish/UiExample

1.工具背景

1.1工具目标

1、使用python开发界面工具

1.2工具特点

1、用户在界面上进行操作

2、工具需要处理大量数据(CPU+内存)

3、工具需要进行持续性任务(高CPU占用)

2.界面程序设计方案

2.1方案一:单进程+多线程

2.1.1设计思路

界面和任务处理线程分开,避免执行任务时界面出现卡死的情况,影响用户体验。

2.1.2详细设计

image.png

1 单进程+多线程

1、主线程启动界面,对界面进行初始化;

2、主线程启动一个线程,作用是后台任务处理;

3、界面(主线程)和后台任务线程之间使用Queue进行数据传输,界面线程写数据,后台线程读数据;

4、后台线程的主线程是一个while循环,用于循环监听Queue

5、用户点击界面的按钮等操作产生一个请求任务,用户每次操作界面,程序并不是直接执行任务,而是将请求任务的代码以及必要附加数据写入Queue

6、后台线程读取到任务代码后,查询任务处理程序,将任务代码和附加数据发送给任务处理程序,任务处理完成之后,将任务处理结果emit到界面显示;

2.1.3方案有效性

1、对于轻量级的应用,即后台不存在高CPU和高内存占用的任务,此方案可以正常工作;

2.1.4方案缺陷

1、但是由于python并不是真正的多线程,所以,如果后台长期存在高CPU和高内存占用的任务,那么可能会出现界面卡死的情况;

2、另一个问题是,由于后台任务处理采用串行处理方式,如果某一个任务处理占用时间长,此时用户请求的其他任务会长时间得不到处理;

3、工具处理的任务并不全是一次性任务,而是存在长期处理任务,即后台处理线程会启动更多的常驻线程,比如trap监听任务,需要在后台启动线程进行长期监听,导致整个程序实际启动的线程数量多,影响工具的性能;

2.2方案二:多进程+多线程

2.2.1设计思路

界面和任务分离。

借用多进程解决方案一中线程的问题,

2.2.2详细设计

image.png

1 多进程+多线程

1、主进程启动界面,对界面进行初始化;

2、主进程启动一个子进程,作用是后台任务处理;

3、进程之间使用Pipe进行数据传输,线程之间使用Queue进行数据传输,主进程和子进程各有一个Pipe和一个Queue

4、主进程有两个线程,一个是界面主线程,一个是while循环监听线程;

5、主进程:

1)界面包含主界面和多个子界面;

2)各个界面的一个任务由任务代码和附加数据定义,用户在界面上进行操作后,程序将任务请求代码和附加数据写入Queue

3)监听线程读取任务代码,如果任务需要本进程中的界面执行,则将任务请求代码和附加数据发送给目标界面处理,界面处理完任务之后,处理结果在两个界面中显示(按需);

4)监听线程读取任务代码,如果任务需要子进程中执行,则将任务请求代码和附加数据写入Pipe,发送给子进程;

5)监听线程从Pipe中读取任务处理结果,在界面中更新,展示给用户;

6、子进程:

1)子进程启动后,初始化所有任务处理程序;

2)子进程的主线程执行while循环监听任务;

3)监听线程读取Pipe的任务处理请求后,查询任务处理程序,将任务请求代码和附加数据发送给任务处理程序;

4)任务处理类处理完后,将处理结果写入Pipe,发送至主进程;

5)子进程中,各个任务处理程序或者功能模块如果需要其他任务处理程序执行任务,同样将任务请求代码和附加数据写入Queue,主线程将读取数据,执行任务;

2.2.3方案有效性

1、多进程真正分离了界面和任务处理,界面不会出现卡死的情况,且子进程由于没有界面的干扰,可以快速的进行任务处理;

2.2.4方案缺陷

1、并不是所有的任务都适用于放置在后台子进程,比如snmp采集任务,一是界面需要读取MIB数据库的内容并显示在界面,二是采集的大量结果需要频繁的显示在界面上。如果采用放置在子进程的方案,则进程之间通信的数据的量会非常大,且存在延时。这是我的担忧,实际上是否有问题并没有验证;

2、如果主进程界面卡死崩溃了,子进程会残留,不会随着主进程的退出而退出;

2.3方案三:多进程+多线程+看门狗

2.3.1设计思路

在方案二的基础上,加入看门狗,如果主进程异常退出了,子进程可以正常退出,解决子进程可能残留的问题。

2.3.2详细设计

image.png

1 多进程+看门狗

1、看门狗是一个独立的线程,分为服务端和客户端;

2、主进程和子进程启动时,首先启动看门狗线程,主进程启动服务端看门狗,子进程启动客户端看门狗;

3、看门狗之间使用Pipe进行通信;

4、服务端看门狗持续监听Pipe,如果收到投喂请求,则向返回一个投喂响应;

5、客户端看门狗间隔一段时间向服务端看门狗发送一次投喂请求;

6、客户端发送投喂请求后,等待一段时间,再查询Pipe是否收到投喂响应,如果连续多次未收到投喂响应,则通知子进程退出;

7、子进程在收到退出事件后,执行退出程序;

2.3.3方案有效性

第一版的看门狗方案是借助已有的进程通信机制,由子进程的主线程定期发送投喂请求,主进程的主线程收到请求后返回投喂响应,但是此方案受其他任务处理影响很大,如果主线程执行任务耗时太长,投喂请求可能得不到及时的响应,导致子进程异常退出。因此才将看门狗在独立的线程中执行,实际效果证明该方案有效。

目录
相关文章
|
8天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
37 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
13天前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的大学竞赛报名管理系统
基于Python+Vue开发的大学竞赛报名管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的大学竞赛报名管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
32 3
基于Python+Vue开发的大学竞赛报名管理系统
|
2天前
|
jenkins 持续交付 Docker
docker之自定义制作镜像(python程序)
docker之自定义制作镜像(python程序)
|
1天前
|
Windows Python
python获取windows机子上运行的程序名称
python获取windows机子上运行的程序名称
|
3天前
|
负载均衡 Java 调度
探索Python的并发编程:线程与进程的比较与应用
本文旨在深入探讨Python中的并发编程,重点比较线程与进程的异同、适用场景及实现方法。通过分析GIL对线程并发的影响,以及进程间通信的成本,我们将揭示何时选择线程或进程更为合理。同时,文章将提供实用的代码示例,帮助读者更好地理解并运用这些概念,以提升多任务处理的效率和性能。
|
5天前
|
SQL 安全 Go
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
在Web开发中,安全至关重要,尤其要警惕SQL注入和XSS攻击。SQL注入通过在数据库查询中插入恶意代码来窃取或篡改数据,而XSS攻击则通过注入恶意脚本来窃取用户敏感信息。本文将带你深入了解这两种威胁,并提供Python实战技巧,包括使用参数化查询和ORM框架防御SQL注入,以及利用模板引擎自动转义和内容安全策略(CSP)防范XSS攻击。通过掌握这些方法,你将能够更加自信地应对Web安全挑战,确保应用程序的安全性。
25 3
|
12天前
|
IDE 数据挖掘 开发工具
python开发
python开发
13 3
|
15天前
|
SQL JavaScript 前端开发
用Java、Python来开发Hive应用
用Java、Python来开发Hive应用
20 6
|
12天前
|
监控 Ubuntu API
Python脚本监控Ubuntu系统进程内存的实现方式
通过这种方法,我们可以很容易地监控Ubuntu系统中进程的内存使用情况,对于性能分析和资源管理具有很大的帮助。这只是 `psutil`库功能的冰山一角,`psutil`还能够提供更多关于系统和进程的详细信息,强烈推荐进一步探索这个强大的库。
27 1
|
14天前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的体育用品商城管理系统
基于Python+Vue开发的体育用品商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的体育用品销售商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
16 0
基于Python+Vue开发的体育用品商城管理系统