Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何与PySide一起正确使用multiprocessing.Pool创建非阻塞GUI_Python_User Interface_Multiprocessing_Pyside - Fatal编程技术网

Python 如何与PySide一起正确使用multiprocessing.Pool创建非阻塞GUI

Python 如何与PySide一起正确使用multiprocessing.Pool创建非阻塞GUI,python,user-interface,multiprocessing,pyside,Python,User Interface,Multiprocessing,Pyside,我正在尝试使用多处理来创建一个非阻塞GUI。函数Multiprocessing.Pool.appy_async()允许添加回调函数,以便在完成时间密集型操作后轻松更新主GUI。但是,单击按钮1时,以下代码仍然会阻塞。我如何修改它,以便在button1回调执行时,button2仍然响应。我正在运行python 2.7和多处理0.70a1 from PySide.QtCore import * from PySide.QtGui import * import multiprocessing imp

我正在尝试使用多处理来创建一个非阻塞GUI。函数Multiprocessing.Pool.appy_async()允许添加回调函数,以便在完成时间密集型操作后轻松更新主GUI。但是,单击按钮1时,以下代码仍然会阻塞。我如何修改它,以便在button1回调执行时,button2仍然响应。我正在运行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
,回调将处理结果