python:并发编程(十九)

news2025/3/1 18:58:32

前言

本文将和大家一起探讨python并发编程的实际项目:win图形界面应用(篇一,共八篇),系列文章将会从零开始构建项目,并逐渐完善项目,最终将项目打造成适用于高并发场景的应用。

本文为python并发编程的第十九篇,上一篇文章地址如下:

python:并发编程(十八)_Lion King的博客-CSDN博客

下一篇文章地址如下:

python:并发编程(二十)_Lion King的博客-CSDN博客

一、技术选型

1、python哪些模块支持win应用?

在Python中,有几个常用的模块可用于设计Windows图形界面应用。以下是其中一些模块的简要介绍:

(1)Tkinter:Tkinter是Python的标准GUI库,提供了创建各种GUI组件的功能,包括窗口、按钮、标签、文本框等。它简单易用,并且适用于多个平台,包括Windows。

(2)PyQt:PyQt是Python的Qt库的绑定,提供了丰富的GUI组件和功能。Qt是一个跨平台的GUI框架,可以用于开发Windows图形界面应用。PyQt使用相对较复杂的API,但它的功能和灵活性非常强大。

(3)wxPython:wxPython是Python的wxWidgets库的绑定,同样也是一个跨平台的GUI框架。它提供了许多用于创建Windows图形界面的组件和工具,包括窗口、按钮、菜单等。

(4)PySide/PySide2:PySide是Python的Qt库的另一个绑定,提供了Qt的GUI功能。它与PyQt类似,但使用的是Qt的LGPL许可证版本。PySide也可以用于创建Windows图形界面应用。

这些模块都有详细的文档和示例代码可供参考。你可以根据自己的需求和偏好选择适合的模块进行GUI应用的设计和开发。同时,还有许多其他的GUI库和工具可供选择,你可以根据实际情况进行评估和决策。

2、支持win应用的模块都有哪些优势?

知道python有哪些模块,那么,我们应该怎么选择则?那得先看看他们的优缺点:

(1)Tkinter:

优势:Tkinter 是 Python 的标准图形界面库,因此无需安装额外的依赖。它简单易用,适合快速开发简单的界面应用。
不足:Tkinter 的默认外观和功能相对较简单,可定制性较低。
(2)PyQt:

优势:PyQt 是基于 Qt 框架的 Python 绑定库,提供了丰富的界面控件和功能,具有良好的可定制性和扩展性。它是一个成熟、稳定且广泛使用的图形界面库。
不足:PyQt 的学习曲线较陡峭,尤其是对于新手来说。此外,PyQt 的商业许可证需要付费,但也有开源版本可供使用。
(3)wxPython:

优势:wxPython 是基于 wxWidgets 的 Python 绑定库,提供了跨平台的图形界面开发解决方案。它具有良好的可移植性、可定制性和丰富的控件库,适用于构建复杂的桌面应用程序。
不足:wxPython 的文档相对较少,对于一些特定的功能和定制需求,可能需要更多的研究和实践。
(4)PySide/PySide2:

优势:PySide(PySide2)也是 Qt 框架的 Python 绑定库,类似于 PyQt。它提供了与 PyQt 相似的功能和特性,包括强大的可定制性和丰富的控件库。与 PyQt 不同的是,PySide 使用 LGPL 开源许可证,因此在某些情况下可能更适合商业应用。
不足:由于历史原因,PySide 和 PySide2 之间存在一些差异和兼容性问题。同时,PySide 的文档和社区支持相对较少。

这些模块都提供了丰富的功能和控件,可以根据项目需求和个人偏好选择合适的模块进行图形界面应用的设计和开发。我司面对的是内部客户,界面要求简单,因此Tkinter满足需求,后续也将基于这个进行分享。

3、多进程、多线程还是多协程?

基于 Tkinter 的并发编程可以采用多线程方式。

Tkinter 库本身是单线程的,意味着它在主线程中处理界面的更新和事件响应。如果在主线程中执行耗时操作,界面会出现卡顿或无响应的情况,影响用户体验。因此,为了保持界面的流畅性和响应性,可以将耗时操作放在后台线程中执行,让主线程专注于界面更新和事件处理。

使用多线程可以使耗时操作在后台线程中并发执行,同时保持主线程的界面响应。线程之间可以通过线程间通信机制(如队列)进行数据交换和同步。例如,可以在一个后台线程中执行耗时的数据处理任务,而主线程则负责更新界面和处理用户交互。

需要注意的是,在多线程编程中需要处理好线程安全性和资源共享的问题,避免出现竞争条件和数据访问冲突。可以使用锁、信号量等线程同步机制来确保线程安全性。

相比而言,多进程和多协程在 Tkinter 应用中的使用场景相对较少。多进程适用于涉及到 CPU 密集型任务的并行计算,而多协程适用于 I/O 密集型任务的并发处理。但由于 Tkinter 库本身的限制,多进程和多协程的使用可能会导致与界面交互和更新相关的问题,因此一般推荐使用多线程来处理并发任务。

二、实现功能

我们的应用将是用于测试协议的工具,比如TCPserver、TCPclient,界面也很简单,就是电脑作为客户端或服务端,可以打开多个tab页,进行协议测试,要求支持多个窗口。

1、界面布局展示

 2、性能要求

支持多个窗口,窗口数量不限,即使如此,上位机崩溃应该取决于系统资源不够,也不应该取决于应用本身。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

跨模态检索论文阅读:(PTP)Position-guided Text Prompt for Vision-Language Pre-training

(PTP)Position-guided Text Prompt for Vision-Language Pre-training 视觉语言预训练的位置引导文本提示 摘要 视觉语言预训练(VLP)已经显示出将图像和文本对统一起来的能力,促进了各种跨模态的学习任务。 然而,我们注意到,VLP模型往往缺乏…

Redis 2023面试5题(五)

一、Redis主节点岩机导致数据全部丢失怎么恢复数据 1. 备份恢复: 如果你已经设置了定期备份,可以使用备份文件进行恢复。首先,停止Redis服务器,将备份文件复制到Redis数据目录中,然后启动Redis服务器。这将恢复备份时…

Maven学习1

概述 主要学习记录Maven仓库相关知识,如何借助上传项目jar包到GitHub、Nexus Sonatype,,以及搭建自己的Nexus Sonatype私服,然后在Maven项目的pom文件引入使用,参考Maven官网文档:https://central.sonatype.org/publi…

0基础学习地平线QAT量化感知训练

文章目录 1. 背景2. 基础理论知识3. 文件准备与程序运行4. 代码详解4.1 导入必要依赖4.2 主函数4.3 构建fx模式所需要的float_model4.4 不同阶段模型的获取4.5 定义常规模型训练与验证的函数4.6 float与qat训练代码解读——float_model/qat_model4.7 模型校准部分的代码解读——…

day58_LayUI

Layui 一、介绍 layui(谐音:类 UI) 是一套开源的Web UI解决方案,采用自身经典的模块化规范,并遵循原生HTML/CSS/JS的开发方式,常适合网页界面的快速开发。layui 区别于那些基于MVVM 底层的前端框架,它更多…

2020新基建决赛-misc-ezPIC

2020新基建决赛-misc-ezPIC 一、概要 1、标题:ezPIC 2、关键字:盲水印、png宽高 3、比赛:2020新基建决赛 4、工具:python、010editor 二、开始 1、题目分析 在此感谢csdn上星辰之门和零食商人两位大佬给出的解题思路。 题目解…

黑马头条-day02

文章目录 前言一、文章列表加载1.1 需求分析1.2 表结构分析1.3 导入文章数据库1.4 实现思路1.5 接口定义1.6 功能实现 二、freemarker2.1 freemarker简介2.2 环境搭建&&快速入门2.2.1 创建测试工程 2.3 freemarker基础2.3.1 基础语法种类2.3.2 集合指令2.3.3 if指令2.3…

#10036. 「一本通 2.1 练习 2」Seek the Name, Seek the Fame

字符串的题真的要比dfs,bfs的简单好多 大致思路 首先,再度重复哈希函数 H ( C ′ ) H ( C , k n ) − H ( C , k ) ∗ b n H(C)H(C,kn)-H(C,k)*b^n H(C′)H(C,kn)−H(C,k)∗bn具体模板详见我的上几篇题解 哈希函数模板对此题,我们只需要对…

RPC 框架架构设计

RPC 框架架构设计 RPC 又称远程过程调用(Remote Procedure Call),用于解决分布式系统中服务之间的调用问题。通俗地讲,就是开发者能够像调用本地方法一样调用远程的服务。下面我们通过一幅图来说说 RPC 框架的基本架构。 RPC 框架…

(二)WPF - 应用程序

一、运行程序的过程: (1) Application 对象被构造出来。(2)Run方法被调用。(3)Application.Startup 事件被触发(4)用户代码构造一个或多个 Window 对象。(5&…

Hibernate知识总结

关于Hibernate映射 关于Hibernate的映射要说明的一点就是关于ID的访问权限,property以及field的区别。以前使用的时候根本没有注意过这个问题,这里简单的强调一下。 表的主键在内存中对应一个OID对象描述标识符,需要在xml的配置文件中要指定对…

数据结构——队列的实现

队列,又称为伫列(queue),计算机科学中的一种抽象资料类型,是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear&…

Hadoop 集群如何升级?

前言 本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 正文 升级 Hadoop 集群需要细致的规划,特…

Web安全——JavaScript基础

JavaScript基础 一、概述二、嵌入方法1、内嵌式2、外链式3、行内式 三、语句四、注释五、变量六、JavaScript 保留关键字七、JavaScript 作用域1、JavaScript 局部变量2、JavaScript 全局变量 八、数据类型1、判断类型2、数字类型(Number)3、字符串型&am…

windows第三大结构体--KPCR

前面我们介绍了windows的两大结构体,一个是进程结构体,一个是线程结构体。那么第三个就是KPCR。KPCR是什么呢,是用于描述CPU的结构体。每一个CPU都有一个这样的结构体来描述CPU干了什么事。 1.在当线程切换的时候,也就是线程从3环…

Windows和Linux动态注入

摘要:最近对动态注入有一些兴趣因此搜索了些资料,简单整理了下相关的技术实现。本文只能够带你理解何如注入以及大概如何实现,对注入的方法描述的并不详细。   关键字:dll注入,hook,提权   读者须知&am…

hadoop -- Yarn资源管理

Yarn YARN被设计用以解决以往架构的需求和缺陷的资源管理和调度软件。 Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统和调度平台,可…

基于uprobe的调试调优浅析

uprobe与krobe对应,动态附加到用户态调用函数的切入点称为uprobe,相比如kprobe 内核函数的稳定性,uprobe 的函数由开发者定义。uprobe是用户态的探针,它和kprobe是相对应的,kprobe是内核态的探针。uprobe需要制定用户态…

深度学习模型压缩方法综述

深度学习因其计算复杂度或参数冗余,在一些场景和设备上限制了相应的模型部署,需要借助模型压缩、系统优化加速等方法突破瓶颈,本文主要介绍模型压缩的各种方法,希望对大家有帮助。 1,模型压缩技术概述 我们知道,一定程度上,网络越深,参数越多,模型也会越复杂,但其最终…

基于Smb协议实现网络文件传输

文章目录 什么是SMB协议SMB与CIFS区别为什么要使用SMB如何对接SMB服务如何用Java实现Smb文件传输SmbV1的实现基于SmbV1的文件上传基于SmbV1的文件下载基于SmbV1的文件重命名基于SmbV1的文件删除基于SmbV1的文件查询 SmbV2的实现基于SmbV2的文件上传基于SmbV2的文件下载基于SmbV…