27. 多线程技术

一、多线程技术

  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())
posted @   星光映梦  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
历史上的今天:
2024-01-15 44. 电阻式触摸屏
点击右上角即可分享
微信分享提示