Python: multiprocessing in pyqt application

2020-04-16 06:23发布

问题:

I have an i7 CPU in my computer and to improve the performance in time computation for my pyqt application I am trying to use the multiprocessing module; when I do in a pyqt application something like this:

import multiprocessing as multiprocessing

def foo(ii):
    print ii

pool = multiprocessing.Pool(8)
pool.map(foo, range(10))

then the application generates 8 pyqt GUIs that are the clones of the first main window (in total I have 9 pyqt GUI that it is of course wrong, what I want to do is the parallel computation and no clone the main GUI xD).

I tried joblib library too (http://pythonhosted.org/joblib/) but the problem is the same.

Is there a way to do the parallel computation in a pyqt application with multiprocessing or joblib module?

Thanks for any help

回答1:

If you are on Windows, multiprocessing will launch new processes that import your main module. Be sure to protect the GUI creation code by placing it under if __name__ == '__main__':

Better yet, to avoid the overhead of importing PyQt unnecessarily in the subprocesses, create a simple new main module like this:

if __name__ == '__main__':
    import old_main_module
    old_main_module.main()


回答2:

Do you want to spawn multiple processes for pyqt or do you want to add additional processes for the 'logic' of your application?

More to the point: don't multiprocess the pyqt container - if you want parallelism, spawn processes on the logic of your application and return the result to your view layer.



回答3:

I came accross here after running into the "multiple GUIs on multioprocessing.Pool()" problem. After a while I found the solution here respectively here:

from multiprocessing import freeze_support

if __name__ == '__main__':
    freeze_support()

    a = QApplication(sys.argv)
    ...