Как использовать multiprocessing.Pool правильно с PySide для создания неблокирующего графического интерфейса

Я пытаюсь использовать многопроцессорную обработку для создания неблокирующего графического интерфейса. Функция Multiprocessing.Pool.appy_async () позволяет добавить функцию обратного вызова, что упрощает обновление основного графического интерфейса после завершения интенсивной работы. Тем не менее, следующий код по-прежнему блокируется при нажатии на кнопку1. Как я могу изменить это, так что, пока выполняется обратный вызов button1, кнопка 2 все еще отвечает. Я запускаю python 2.7 и многопроцессорную обработку 0.70a1.

from PySide.QtCore import * from PySide.QtGui import * import multiprocessing import time import sys def f(x): '''This is a time-intensive function ''' y = x*x time.sleep(2) return y class MainWindow(QMainWindow): #You can only add menus to QMainWindows def __init__(self): super(MainWindow, self).__init__() self.pool = multiprocessing.Pool(processes=4) button1 = QPushButton('Connect', self) button1.clicked.connect(self.apply_connection) button2 = QPushButton('Test', self) button2.clicked.connect(self.apply_test) self.text = QTextEdit() vbox1 = QVBoxLayout() vbox1.addWidget(button1) vbox1.addWidget(button2) vbox1.addWidget(self.text) myframe = QFrame() myframe.setLayout(vbox1) self.setCentralWidget(myframe) self.show() #display and activate focus self.raise_() def apply_connection(self): result = self.pool.apply_async(f, [10], callback=self.update_gui) result.get(3) def update_gui(self, result): self.text.append('Applied connection. Result = %d\n' % result) def apply_test(self): self.text.append('Testing\n') if __name__ == '__main__': app = QApplication(sys.argv) gui = MainWindow() app.exec_() 

result.get(3) блокирует 3 секунды, чтобы дождаться результата. Не вызывайте get , обратный вызов будет обрабатывать результат.