从QThread(Python)中的另一个进程复制大变量

2024-10-03 15:22:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用PySide用python开发一个带有Qt gui的程序。我使用QThread运行一些函数并更新gui。这是我的QThread子类

class ParseClass(QtCore.QThread):
StartParse = QtCore.Signal()
EndParse = QtCore.Signal()
ParseError = QtCore.Signal()
Out = None

def __init__(self, filename, pbar, filetype, *args):
    QtCore.QThread.__init__(self)
    self.Filename = filename
    self.FileType = filetype
    if args:
        self.XLSType = args[0]
    # Connect events
    self.StartParse.connect(pbar.onStart)
    self.EndParse.connect(pbar.onFinished)
    self.ParseError.connect(pbar.onError)

但是有些函数需要多重处理,所以我有一个多处理过程 子类是MPStuff.消费者()下面,运行一些函数。你知道吗

我的问题开始了。当这个派生的进程完成时,另一个进程中产生的大量数据需要复制到Qthread,Qthread是主进程的一部分。但这会冻结一切。上面的函数是上面QThread子类的一个方法。冻结操作是在我从结果队列获取数据时进行的。结果=结果.get()

def XMLMultiCore(self):
            result = multiprocessing.Queue()
            task = multiprocessing.Queue()
            process = MPStuff.Consumer(task, result)
            process.start()
            task.put(xmlrun(self.Filename))
            task.put(None) #poison pill
            result = result.get() ######HERE THE FREEZE HAPPENS
            if type(result) is not Exception:
                self.Out = result
                self.EndParse.emit()
            else:
                print result
                self.ParseError.emit()
            self.quit()

我在QThread中这样做的唯一原因是防止gui冻结。有什么想法吗?你知道吗


Tags: 函数selftasksignal进程connectargsgui