Python:在pyqt应用中使用多进程

3 投票
3 回答
6773 浏览
提问于 2025-04-17 19:44

我电脑里有个i7的处理器,为了提高我的pyqt应用在时间计算上的表现,我想使用多进程模块。但是当我在pyqt应用中这样做的时候:

import multiprocessing as multiprocessing

def foo(ii):
    print ii

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

结果是应用生成了8个pyqt的图形界面,这些界面都是第一个主窗口的克隆(总共出现了9个pyqt界面,这显然是不对的,我想要的是并行计算,而不是克隆主界面,哈哈)。

我也试过joblib这个库(http://pythonhosted.org/joblib/),但问题还是一样。

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

谢谢大家的帮助!

3 个回答

1

我在遇到“在多进程中使用多个图形界面(GUI)”的问题时,找到了这个地方。过了一段时间,我找到了这个问题的解决办法,具体可以在这里这里查看:

from multiprocessing import freeze_support

if __name__ == '__main__':
    freeze_support()

    a = QApplication(sys.argv)
    ...
1

你是想为pyqt创建多个进程,还是想为你应用的“逻辑”部分添加额外的进程呢?

更直接一点:不要对pyqt这个容器进行多进程处理。如果你想实现并行处理,就在你应用的逻辑部分创建进程,然后把结果返回给你的视图层。

4

如果你在使用Windows系统,使用多进程时会启动新的进程,这些进程会导入你的主模块。为了避免问题,确保把创建图形用户界面的代码放在 if __name__ == '__main__': 这个条件下。

更好的做法是,为了避免在子进程中不必要地导入PyQt,可以创建一个简单的新主模块,像这样:

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

撰写回答