python的多线程其实不是真正的多线程,只是个并发而已。一旦执行真正的耗时操作(非sleep操作),就会卡住。
要实现真正的多线程,有两个方法(暂时知道的):
一、用多进程
参考:
多线程,多进程的用法
进程间通讯
但是,利用多进程的方式,交换数据会很麻烦(需要用到队列、管道等方式)。
二、用QThread。
幸亏,有个简单的方式,那就是用Qt的QThread。
QThread实现的多线程,从目前的的测试来看,的确是起到了多线程的作用。
星号(*、**)的妙用
from PyQt5.QtCore import QThread
class TrainThread(QThread):
def __init__(self, target, args):
super(TrainThread, self).__init__()
print('init thread')
self.target = target
self.args = args
def run(self):
# self.target(self.args[0], self.args[1], self.args[2])
self.target(*self.args)
t = None
class ModelClass():
def trainModel(self, trainData, evaluate, epochs):
"""
训练模型接口
:param trainData: 训练模型的数据
:param evaluate: 评估模型的数据
:param epochs: 训练模型的总次数
:return:
"""
# 直接执行的话,会卡住主线程,卡到定时器都停止工作。
# self.model.train(trainData=trainData, testData=evaluate, epochs=epochs)
# 通过多线程的方式来启动,就好很多
global t
t = TrainThread(target=self.model.train, args=(trainData, evaluate, epochs))
t.start()