为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

幕布斯7119047 2021-03-30 21:08:25
我尝试使用多处理来创建非阻塞GUI。函数Multiprocessing.Pool.appy_async()允许添加回调函数,从而在完成耗时的操作之后轻松更新主GUI。但是,下面的代码在单击button1时仍然会阻塞。我该如何修改它,以便在执行button1回调时,button2仍然能够响应。我正在运行python 2.7和多处理0.70a1。from PySide.QtCore import *from PySide.QtGui import *import multiprocessingimport timeimport sysdef f(x):    '''This is a time-intensive function    '''    y = x*x    time.sleep(2)    return yclass 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_()
查看完整描述

1 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

result.get(3)等待3秒钟以等待结果。不要调用get,回调将处理结果。


查看完整回答
反对 回复 2021-04-05
  • 1 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信