多处理与多线程

时间:2014-10-18 20:49:04

标签: python multithreading multiprocessing

我有一个GUI,只需点击一个按钮,我就必须开始一个大的计算。

我正在使用QtDesigner和python 2.7

一开始,我遇到的问题是,当大计算工作时,我的GUI变得没有响应。

我使用线程模块解决了这个问题:

class myMainWindow(QtGui.QMainWindow):

    def __init__(self, parent=None):
        #rest of the code here

class heavyCalculations(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        #rest of the code here

我现在的疑问是:假设我想要开始4次繁重的计算,并且我想要按时使用计算机的所有4个内核。为此我需要多处理,但是我应该怎样做才能避免我的GUI无响应,但同时要按时使用4个核心?

据我所知,如果我为每个繁重的计算开始一个新的过程,它确实并行工作,但我的GUI变得没有响应。

如果我启动4个线程,它也可以工作,GUI不受影响,但这不是真正的并行。

任何帮助?

1 个答案:

答案 0 :(得分:1)

如果您不希望计算过程减慢GUI过程,则应确保GUI过程的运行优先级高于计算过程。这样,每当存在核心争用时(即,当有多个进程同时想运行时,计算机上有CPU核心运行它们),GUI进程将获得第一个dib,计算过程将不得不等到GUI已经完成了它想做的任何事情。

实现这一目标的最简单方法是让计算过程在开始计算之前首先降低自己的优先级。至于如何让Python进程降低其优先级,请参阅here