Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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 3.x PyQt5和多处理-多个进程不正确地创建多个窗口_Python 3.x_Pyqt5_Multiprocess - Fatal编程技术网

Python 3.x PyQt5和多处理-多个进程不正确地创建多个窗口

Python 3.x PyQt5和多处理-多个进程不正确地创建多个窗口,python-3.x,pyqt5,multiprocess,Python 3.x,Pyqt5,Multiprocess,尝试在PyQt5 GUI框架内实现多处理,以便在并行进程中处理多个文件,最好是在QThread()后台。运行下面的代码似乎创建了多个进程,但还有一个问题,即出现多个GUI窗口,此时所有内容都被锁定 import multiprocess as mp from PyQt5.QtWidgets import QMainWindow class MyApp(QMainWindow, myUiMainWindow): def __init__(self): super(sel

尝试在PyQt5 GUI框架内实现多处理,以便在并行进程中处理多个文件,最好是在QThread()后台。运行下面的代码似乎创建了多个进程,但还有一个问题,即出现多个GUI窗口,此时所有内容都被锁定

import multiprocess as mp
from PyQt5.QtWidgets import QMainWindow

class MyApp(QMainWindow, myUiMainWindow):

    def __init__(self):
        super(self.__class__, self).__init()
        self.setupUI(self) 
        self.pushButton.clicked.connect(self.doMyStuff)

    def consumer(self, inQ, outQ):
        val = inQ.get()
        ret = self.process_single(val)
        outQ.put(ret)

    def process_single(self, f):
        <process each file f>
        <update progress bar>
        return f

    def doMyStuff(self):
        <get file_list from GUI Widget>
        n_w = len(file_list) if len(file_list) < 5 else 5
        inQ = mp.Queue()
        outQ = mp.Queue()

        workers = [mp.Process(target=consumer, args=(inQ, outQ) for i in range(n_w)]
        [w.start() for w in workers]
        [inQ.put(f) for f in file_list]
        [inQ.put(None) for i in range(n_w)]

        completed_files = []
        while len(completed_files) != len(file_list):
            completed_files.append(outQ.get())

        [w.join() for w in workers]
将多进程导入为mp
从PyQt5.QtWidgets导入QMainWindow
类MyApp(QMainWindow、myUiMainWindow):
定义初始化(自):
超级(self.\uuuuuuu类\uuuuuuuu,self)。\uuuuuu init()
self.setupUI(self)
self.butdown.clicked.connect(self.doMyStuff)
def耗电元件(自身、inQ、outQ):
val=inQ.get()
ret=自处理(val)
输出(ret)
def处理单(自身,f):
返回f
def doMyStuff(自身):
n_w=len(文件列表)如果len(文件列表)小于5,则为len(文件列表)
inQ=mp.Queue()
outQ=mp.Queue()
workers=[mp.Process(target=consumer,args=(inQ,outQ)对于范围内的i(n_w)]
[w.开始()适用于工人中的w]
[在文件列表中为f输入(f)]
[inQ.put(无)表示范围内的i(n_w)]
已完成的_文件=[]
而len(已完成的文件)!=len(文件列表):
已完成的_files.append(outQ.get())
[w.join()代表w-in工人]
猜猜看

执行以下操作以仅构建一次GUI:

将多进程导入为mp
从PyQt5导入QtWidgets
从QtWidgets导入QMainWindow
…代码片段…脚本代码。。。
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app=qtwidts.QApplication(sys.argv)
window=MyApp()
窗口。设置几何图形(300100600600)#可调(左、上、宽、高)
window.show()
sys.exit(app.exec_())
…你现在可能已经弄明白了;猜猜看

执行以下操作以仅构建一次GUI:

将多进程导入为mp
从PyQt5导入QtWidgets
从QtWidgets导入QMainWindow
…代码片段…脚本代码。。。
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app=qtwidts.QApplication(sys.argv)
window=MyApp()
窗口。设置几何图形(300100600600)#可调(左、上、宽、高)
window.show()
sys.exit(app.exec_())
…您现在可能已经解决了这个问题;p

[w.start()用于w-in-workers]
这是一种有趣的执行操作的方式!不太新颖,但您可以在一行中
用于w-in-workers:w.start()
[w.start()用于w-in-workers]
这是一种有趣的执行动作的方式!不太新颖,但您可以在workers:w.start()中为w执行一行