Python中执行耗时操作(多线程、多进程)

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值