3

我的计算机中有一个 i7 CPU,为了提高我的 pyqt 应用程序的时间计算性能,我正在尝试使用多处理模块;当我在 pyqt 应用程序中执行以下操作时:

import multiprocessing as multiprocessing

def foo(ii):
    print ii

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

然后应用程序生成 8 个 pyqt GUI,它们是第一个主窗口的克隆(我总共有 9 个 pyqt GUI,这当然是错误的,我想要做的是并行计算并且不克隆主 GUI xD)。

我也尝试了 joblib 库(http://pythonhosted.org/joblib/),但问题是一样的。

有没有办法在 pyqt 应用程序中使用 multiprocessing 或 joblib 模块进行并行计算?

谢谢你的帮助

4

3 回答 3

4

如果您在 Windows 上,多处理将启动导入主模块的新进程。确保通过将 GUI 创建代码放在下面来保护它if __name__ == '__main__':

更好的是,为了避免在子进程中不必要地导入 PyQt 的开销,创建一个简单的新主模块,如下所示:

if __name__ == '__main__':
    import old_main_module
    old_main_module.main()
于 2013-03-20T11:00:17.077 回答
1

您想为 pyqt 生成多个进程,还是想为应用程序的“逻辑”添加额外的进程?

更重要的是:不要多处理 pyqt 容器 - 如果您想要并行性,请在应用程序的逻辑上生成进程并将结果返回到您的视图层。

于 2013-03-20T10:38:56.883 回答
1

在遇到“multioprocessing.Pool() 上的多个 GUI”问题后,我来到这里。过了一会儿,我分别在这里找到了解决方案:

from multiprocessing import freeze_support

if __name__ == '__main__':
    freeze_support()

    a = QApplication(sys.argv)
    ...
于 2019-06-14T07:45:08.557 回答