首页 > 其他分享 >27. 多线程技术

27. 多线程技术

时间:2025-01-15 20:10:25浏览次数:1  
标签:__ 状态 None 27 技术 Priority 线程 多线程 QThread

一、多线程技术

  QThread 类是 PySide 中的核心线程类,要实现一个线程,需要创建 QThread 类的有一个子类,并且实现其 run() 方法。

  线程也有自己自己的生命周期,其中包含 5 种状态,分别为:新建状态就绪状态运行状态阻塞状态** 和 死亡状态新建状态 就是线程被创建时的状态;当线程对象调用 start() 方法后,线程就处于 就绪状态,当线程得到系统资源后就进入 运行状态

  一旦线程进入运行状态,它会在就绪和运行状态下切换,同时也可能进入阻塞或死亡状态。当处于 运行状态 下的线程在调用 sleep()wait() 方法或者发生阻塞时,会进入 暂停状态;当在休眠结束或者阻塞解除时,线程会重新进入 就绪状态;当线程的 run() 方法执行完毕,或者线程发生错误、异常时,线程就进入 死亡状态

  我们可以在终端中使用 pip 安装 pyside6 模块。

pip install pyside6

  QThread 类的常用方法及其说明如下:

start(priority:QThread.Priority=QThread.Priority.InheritPriority) -> None       # 启动线程
run() -> None                                                                   # 线程的起点
wait(time:int) -> None                                                          # 阻塞线程
usleep(us:int) -> None                                                          # 以微秒为单位休眠线程
msleep(ms:int) -> None                                                          # 以毫秒为单位休眠线程
sleep(s:int) -> None                                                            # 以秒为单位休眠线程
exit(retcode:int=0) -> int                                                      # 退出线程的事件循环,并返回代码,返回0表示成功,任何非0值都表示错误
quit() -> int                                                                   # 退出线程的事件循环,并返回代码0(成功),相当于exit(0)
terminate() -> None                                                             # 强制终止线程
setPriority(priority:QThread.Priority.IdlePriority) -> None                     # 设置线程的优先级
isRunning() -> bool                                                             # 获取线程是否在运行
isFinished() -> bool                                                            # 获取线程是否完成

  我们可以调用 setPriority(priority) 方法来设置线程的优先级,其中 priority 为 QThread.Priority 的枚举值,可以取值如下:

QThread.Priority.IdlePriority            # 空闲优先级
QThread.Priority.LowestPriority          # 最低优先级
QThread.Priority.LowPriority             # 低优先级
QThread.Priority.NormalPriority          # 系统默认优先级
QThread.Priority.HighPriority            # 高优先级
QThread.Priority.HighestPriority         # 最高优先级
QThread.Priority.TimeCriticalPriority    # 尽可能频繁地分配执行
QThread.Priority.InheritPriority         # 默认用与创建线程相同地优先级

  在调用 start() 方法启动线程后,新创建的线程将调用 run() 方法开始执行。如果我们向强制终止线程,可以调用 terminate() 方法,在 terminate() 方法之后应该使用 wait() 方法,以确保当线程终止时,等待完成的所有线程都将被唤醒
  QThread 类常用的信号及其说明如下:

started()       # 在调用run()方法之前,在相关线程开始执行时从该线程发射
finished()      # 在相关线程完成执行之前,从该线程发射
import sys

from PySide6.QtWidgets import QApplication
from PySide6.QtCore import QThread

class Thread(QThread):
    def __init__(self):
        # 调用父类的初始化方法
        super(Thread, self).__init__()

    def run(self):
        """重写run()方法"""
        num = 10
        while num >=0 :
            print(num)
            # 线程休眠1秒
            Thread.sleep(1)
            if num == 0:
                # 退出线程
                self.quit()
            num -= 1

if __name__ == "__main__":
    # 1.创建一个QApplication类的实例
    app = QApplication(sys.argv)
    # 2.创建线程对象
    thread = Thread()
    # 3.启动线程
    thread.start()
    # 4.进入程序的主循环并通过exit()函数确保主循环安全结束
    sys.exit(app.exec())

标签:__,状态,None,27,技术,Priority,线程,多线程,QThread
From: https://www.cnblogs.com/FlurryHeart/p/18673665

相关文章

  • 基于SpringBoot 技术的智慧云停车场服务管理系统
    一、系统背景与意义随着城市化进程的加快和汽车保有量的不断增加,停车难问题日益突出。传统的停车场管理方式存在着效率低下、管理成本高、用户体验差等问题。因此,开发一个基于SpringBoot技术的智慧云停车场服务管理系统具有重要意义。该系统能够实时采集和处理停车场数据,提......
  • 技术领先的基于Excel的统计学分析和机器学习软件XLSTAT®
     技术领先的基于Excel的统计学分析和机器学习软件XLSTAT® XLSTAT®是一款强大的Excel数据统计分析和机器学习插件,使您可以在Excel中轻松分析和重新格式化数据。在学术研究和私人企业业务研究中,数据是最为重要的信息来源。无论您所在的专业领域是什么,您需要强大、......
  • AcWing 274. 移动服务 题解
    Tag:线性dp题面link题目描述一个公司有三个移动服务员,最初分别在位置\(1,2,3\)处。如果某个位置(用一个整数表示)有一个请求,那么公司必须指派某名员工赶到那个地方去。某一时刻只有一个员工能移动,且不允许在同样的位置出现两个员工。从\(p\)到\(q\)移动一个员工,需要花费......
  • GaussDB技术解读——GaussDB架构介绍之数据持久化存取层(DataNode)关键技术方案
    数据持久化存取层(DataNode)关键技术方案Datanode节点主要负责数据的持久化和快速写入、读取。数据持久化采用物理日志wal,事务提交wal刷盘,对外提供逻辑日志功能,反解析物理日志为SQL逻辑日志。图1datanode数据持久化Astore:存储格式为追加写优化设计,其多版本元组采用新、老版......
  • GaussDB技术解读——GaussDB架构介绍之全局事务管理层(GTM)关键技术方案
    GTM仅处理全局时间戳请求,64位CSN递增,几乎都是CPU++和消息收发操作。不是每次都写ETCD,而是采用定期持久化到ETCD里,每次写ETCD的CSN要加上一个backup_step(100w),一旦GTM故障,CSN从ETCD读取出来的值保证单调递增。当前GTM只完成CSN++,预估可以支持200M/s请求。GTM处理......
  • GaussDB技术解读——GaussDB架构介绍之集群管理层(CM)关键技术方案
    GaussDBKernelV5集群管理层关键模块如下。图4集群管理层组件设计图CM组件提供了四种服务CMAgent,CMServer,OMMonitor,cm_ctl,与各类实例服务组件(CN,DN,GTM等)一起构成了整个数据库集群系统。cm_ctl通过命令行执行集群的启动、停止、状态查询、主备倒换、备机重......
  • GaussDB技术解读——GaussDB架构介绍之OM运维管理关键技术方案
    ​GaussDBKernelV5OM运维管理关键模块如下。OM运维主要功能有:安装升级节点替换扩容、缩容自动告警巡检备份恢复、容灾日志分析系统在华为云的部署模式下,OM相关组件部署示意图如下:图7华为云OM运维管理用户登录华为云Console,访问GaussDBKernelV5的管控页面,输入......
  • Java多进程多线程处理详解
    在Java编程中,多进程和多线程是两种常见的并发编程技术,用于提高程序的执行效率和响应速度。本文将详细介绍Java中的多进程和多线程处理,包括理论概述和代码示例。通过本文,你将了解如何在Java中实现多进程和多线程,以及它们在实际应用中的价值和意义。一、理论概述1.多进程与多线程......
  • 揭秘35岁技术人去向:是高薪管理,还是无奈转行?
    135岁危机35是虚指,不一定35岁,也可是一个区间。有人33岁,有人是40岁。对技术人,到年龄确实明显困境。甚至不到35岁,网上招聘焦虑到32岁。头部大厂小伙伴说晋升就像“续命卡”。升上去不一定稳,但可“多活”一两年,升不上去,不但目前绩效难保,甚至可能进入下一波裁员名单。“......
  • 基于dRRBS技术的精液DNA甲基化年龄预测:全基因组标记鉴定和模型开发
    大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。DNA甲基化(DNAm)在特定CpG位点上的5-甲基胞嘧啶(5mC)比例随年龄而显著变化,因此DNA甲基化是法医学中估计个体年龄的关键分子标记,然而,基于年龄相关CpG位点(AR-CpG)DNA甲基化标记的年龄预测模型在不同细胞类型和组织中的表现不......