python的threading和Pyqt的QThread

发布于:2024-08-24 ⋅ 阅读:(95) ⋅ 点赞:(0)

python_线程

我们可以通过直接从 threading.Thread 继承创建一个新的子类,并实例化后调用 start() 方法启动新线程,即它调用了线程的 run() 方法:

常用方法
run() 用以表示线程活动的方法。
start() 启动线程活动。
join([time]) 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
isAlive() 返回线程是否活动的。
getName() 返回线程名。
setName() 设置线程名。

示例代码

#!/usr/bin/python3

import threading
import time

exitFlag = 0

# 创建线程类继承threading.Thread
class myThread (threading.Thread):
    # 线程 构造函数
    def __init__(self, threadID, name, delay):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.delay = delay

    # 线程运行函数
    def run(self):
        print ("开始线程:" + self.name)
        print_time(self.name, self.delay, 5)
        print ("退出线程:" + self.name)

def print_time(threadName, delay, counter):
    while counter:
        if exitFlag:
            threadName.exit()
        time.sleep(delay)
        print ("%s: %s" % (threadName, time.ctime(time.time())))
        counter -= 1

# 创建新线程
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)

# 开启新线程
thread1.start()
thread2.start()
#等待至线程中止
thread1.join()
thread2.join()
print ("退出主线程")

QThread 线程

常用方法
start() 启动线程
wait() 阻止线程,直到满足如下条件之一
(1)与此QThread对象关联的线程已完成执行(即从run返回时),如果线程完成执行,此函数返回True,如果线程尚未启动,也返回True
(2)等待时间的单位是毫秒,如果时间是ULONG_MAX(默认值·),则等待,永远不会超时(线程必须从run返回),如果等待超时,此函数将会返回False
sleep() 强制当前线程睡眠多少秒
常用信号
started 在开始执行run函数之前,从相关线程发射此信号
finished 当程序完成业务逻辑时,从相关线程发射此信号

示例代码

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import socket
import time
import sys
sys.path.append(".")



class my_QThread(QThread):
    # 线程初始化
    def __init__(self):
        self.running = True
        super().__init__()
    # 线程释放
    def __del__(self):
        # 线程状态改变与线程终止
        self.running = True
    # 线程运行
    def run(self):
            while self.running:
                print("循环任务正在执行...")
                # 线程休眠,必须加否则阻塞其他线程
                time.sleep(0.001)
  
    # 停止
    def stop(self):
        self.running = False


def main():
    app = QApplication(sys.argv)
    # 线程实例化
    my_QThread_test = my_QThread()
    # 启动线程
    my_QThread_test.start()
    app.exit(app.exec_())
    
# if __name__ == "__main__":
    main()

网站公告

今日签到

点亮在社区的每一天
去签到