0

我的主要问题:你可以有多个进程写入一个循环中的一个队列,并使用该队列来更新GUI?跨多个进程的共享队列

我一直在寻找关于队列和多个进程的帖子,我想知道如果任何人有任何想法,如果它是可能的或有利的使用它们的组合。我的思考过程是这样的:由于所有的处理器现在都具有〜8个内核,因此如果程序的任何部分在计算上都很昂贵,我制作的大多数程序都应该具有访问这种功能的能力。我想要一个GUI,它可以同时显示几个不同进程的进度。我希望每个进程尽可能多地使用处理器,但是他们都必须同时写入GUI,所以从我读过的内容来看,似乎队列将为此工作。

解决这个问题的最好方法是让多个进程通过管道与队列通信,并让队列更新GUI?

目前我正在使用pyQt信号和插槽,但我觉得这是现代时代的糟糕解决方案,因为它只使用一个CPU内核。

回答

1

大多数GUI系统都是事件驱动的,希望所有事件处理来自单个线程。 Windows事件系统,Android事件,Swing以及其他许多应用程序都是如此。在GUI的情况下,使所有事件管理功能线程安全的实际好处很小,而难度相当大。大多数大规模并发系统确实将基于事件的和基于线程的方法组合到并发中,例如现代浏览器。就你而言,只需注册一个更新事件并通过工作进程/线程将其发布到事件派发线程就简单多了。这样,您的GUI将保持对其他窗口事件的响应,因为它只是定期通知。

+0

那么你在这里建议的东西类似于我已经实施的东西?我有一个信号从某个插槽发出,这就是GUI的更新方式。但是,这会将我的一个CPU以100%运行数小时。我想使用多个内核,以便缩短时间并创建更多的进程。 – chase 2013-03-22 17:14:08

+1

您需要分离计算成本较高的操作,并让它们在单独的线程/进程中执行,然后让它们在完成工作后向事件分派线程“回报”,可能会获取某种锁以避免内存损坏。 – 2013-03-22 17:16:05