【发布时间】:2014-10-18 20:49:03
【问题描述】:
我有一个 GUI,只需单击一个按钮,我就必须开始一个大计算。
我在 python 2.7 中使用 QtDesigner
一开始,我遇到的问题是我的 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 不受影响,但这不是真正的并行。
有什么帮助吗?
【问题讨论】:
-
为什么你认为线程不是并行的?
-
线程不是并行的,处理器从一个跳到另一个的速度非常快,假装是“并行的”,但是如果我们在 4 个进程按时在 4 个内核上工作时调用并行,则它不是并行的。不一样。
-
我可以通过多线程让所有内核达到 100%,所以我认为一个进程!= 一个内核
-
由于其GIL,Python实际上并不支持原生多线程,因此,为了使用多核,需要多个进程。
-
恐怕不会像那位朋友那样工作¡¡, 如果负载很高,当然有更多的核心即使有线程也能工作,但如果你想在低负载的情况下全部加载,你去多处理,实际上多处理的性能更好......但无论如何,让我们等待更多答案,我可能错了......我没有在线程上工作太多。
标签: python multithreading multiprocessing