本站消息

  出租广告位,需要合作请联系站长

  今日名言-想象你自己对困难作出的反应,不是逃避或绕开它们,而是面对它们,同它们打交道,以一种进取的和明智的方式同它们奋斗 。——马克斯威尔·马尔兹

  今日名言-用谅解、宽恕的目光和心理看人、待人。人就会觉得葱笼的世界里,春意盎然,到处充满温暖。——蔡文甫


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

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

发布于2021-07-25 06:53     阅读(776)     评论(0)     点赞(17)     收藏(3)


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

原文链接:https://blog.csdn.net/joyopirate/article/details/119033195



所属网站分类: 技术文章 > 博客

作者:机甲战士

链接:http://www.pythonpdf.com/blog/article/522/76dd33bf9c4c38784267/

来源:编程知识网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

17 0
收藏该文
已收藏

评论内容:(最多支持255个字符)