QRunnable线程池发信号
因为只有继承 QObject 的类才能有信号和自定义信号,而 QRunnable 并不是继承自 QObject ,也不能用多继承的方式,这里考虑定义个全局的 QObject 变量用来存放一些定义好的可复用的信号。
pools 是 QThreadPool 实例
# 看图说话
定义一个全局信号类
在 QRunnable 中发送
多线程之守护线程和阻塞线程
如果你设置一个线程为守护线程,就表示你在说这个线程是不重要的,在进程退出的时候,不用等待这个线程退出。如果你的主线程在退出的时候,不用等待那些子线程完成,那就设置这些线程的 daemon 属性。
即在线程开始(thread.start ())之前,调用 setDeamon()函数,设定线程的 daemon 标志。
(thread.setDaemon (True))就表示这个线程 “不重要”。
如果你想等待子线程完成再退出,那就什么都不用做,或者显示地调用 thread.setDaemon (False),设置 daemon 的值为 false。新的子线程会继承父线程的 daemon 标志。
整个 Python 会在所有的非守护线程退出后才会结束,即进程中没有非守护线程存在的时候才结束。
setDaemon () 函数要放在 start 之前设置才行。
import threading
import time
def func():
print("子线程开启:", time.localtime())
time.sleep(2)
print("子线程结束:", ...