一、多线程技术
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