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()