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

时间:2015-04-10 13:08:07

标签: python pyside qthread multiprocess

我正在使用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)

但是有些函数需要多处理,所以我有一个multiprocessing.Process 下面是MPStuff.Consumer()的子类,用于运行一些函数。

我的问题开始了。当这个衍生过程完成时,需要将另一个过程中产生的大量数据复制到Qthread,这是主要过程的一部分。但这冻结了一切。上面的函数是上面QThread子类的一个方法。冻结操作是从结果队列中获取数据的时候。 result = result.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冻结。有什么想法吗?

0 个答案:

没有答案