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

27. 多线程技术

时间:2024-01-17 20:56:29浏览次数:38  
标签:__ 状态 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/kurome/p/17971146

相关文章

  • 代码随想录算法训练营第一天| LeetCode704 二分查找,LeetCode35,LeetCode34,leetcode27.
    LeetCode704题目链接:704.二分查找-力扣(LeetCode)第一时间的想法:简单来说,二分法给我的印象就是想一条绳子上打很多的结,每次对折正好是一个结点,我们需要找到想要的结点比如(a)代码思路就是不断对折一直到绳子两端重合中间没有结点,最后剩下的就是要找的结点a了。......
  • ABC270H add 1
    题解里面有用鞅的停时定理的做法,但我现在既不会离散时间鞅也不记得这个定理是啥了,所以搞点阳间的做法。考虑列出操作次数的概率生成函数\(\mathscr{P}(x)\),也就是从初始状态开始操作\(i\)次后第一次达到终止状态的概率为\([x^i]\mathscr{P}(x)\),那么答案就是\(\mathscr{P}'(......
  • AtCoder ABC 279 复盘
    AwwwvvvvvvACCodeBLOOKUPACCodeCRANDOMACCodeDFreefall分析一下样例1,可以发现答案存在一个\(\sqrt{g}\),然后就联想到三分。这里图像是开口朝上的。注意要开longlong!(但我的代码需要__int128才行,玄学)ACCodeECheatingAmidakuji分析过程,可以发现第\(i\)次......
  • 本周五上海见!第二届证券基金行业先进计算技术大会暨2024低时延技术创新实践论坛(上海站
    低时延技术是证券基金期货领域业务系统的核心技术,是打造极速交易系统领先优势的关键,也是证券基金行业关注的前沿技术热点。1月19日下午,第二届证券基金行业先进计算技术大会暨2024低时延技术创新实践论坛(上海站)即将举办!本次会议将聚焦低时延技术在金融行业的创新实践,邀请了申万宏源......
  • 变电站电力设备数据采集联网对接API转发存储数据库服务器技术方案
    DL_FileData_CJDC文件上海致达智能科技windows/linux/arm解析本地txt和xls文件DL_ABB_API_OLE 网络 ABBDCS windows ABBDCSOLE采集,本地采集DL_KRS_TCP 网络 台山核电 windows/linux/arm 台山核电KRS系统数据采集DL_Xinhua_ASDPU_UDP 网络 新华ASDPU协议 windows/linux/arm ......
  • Illustrator 2024:创意与技术的完美结合 mac/win版
    Illustrator2024是Adobe公司推出的一款专业的图形设计软件,它继承了Adobe系列软件的优点,是一款功能强大的创意工具。→→↓↓载Illustrator2024首先,Illustrator2024拥有直观的界面和强大的功能,使得用户可以轻松地创建和编辑各种矢量图形、插图、图标和排版设计等。无论是专业......
  • 后端技术:typing类型标识
    类型别名#类型别名infoType=Dict[str,Any]people:infoType={"info":1}#有些类型名很长所以用类型别名perple:Dict[str,Any]={"info":1}#可以看出与上面使用类型别名infoType的people作用相同联合类型即可选flag:Union[bool,int]=1#也就是可以......
  • 即时通讯技术文集(第32期):IM开发综合技术合集(Part5) [共12篇]
    为了更好地分类阅读52im.net总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第32 期。[- 1 -] IM开发干货分享:如何优雅的实现大量离线消息的可靠投递[链接] http://www.52im.net/thread-3069-1-1.html[摘要] 本文作者将以自已IM开发过程中的真实总结,分......
  • 武汉灰京文化:手游产业迈向智能化时代,人工智能(AI)技术的广泛应用
    随着科技的不断进步,人工智能(AI)技术在各个领域的应用越来越广泛,手游产业也不例外。AI技术的运用不仅能够提高游戏的智能性,还能够个性化地调整游戏难度,满足不同玩家的需求。这种个性化服务将使手游更贴近玩家,建立更深层次的用户体验。同时,AI技术还将在游戏中实现更智能的角色对话和情......
  • 运城学院数学与信息技术学院 2017—2018学年第二学期期末考试
    运城学院数学与信息技术学院2017—2018学年第二学期期末考试程序设计基础试题(A)适用范围:计算机科学与技术专业1701\1702班网络工程专业1703\1704\1705班信息管理与信息系统专业1706班数字媒体技术专业1707\1708班通信工程专业1709\17010班 命题人: 南丽丽       ......