我正在使用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冻结。有什么想法吗?