QtThreadPool和数据模型

时间:2014-12-23 18:16:28

标签: python multithreading qt pyqt

我正在学习Qt中的多线程,我遇到QThreadPool的问题。

我有一个包含MainController的{​​{1}}类。 该类还有一个特定的方法QThreadPool来初始化线程进程:

processDirectory

然后我在widget中有一个信号/插槽连接,抓住一个新目录来启动class MainController(): def __init__(self, model, view): [...] self.pool = QtCore.QThreadPool() self.pool.setMaxThreadCount(2) def processDirectory(self, dirpath): [...] # Create a directory worker dirrunnable = DirRunnable(dirpath, extSelected, self.model.dirMgrModel) # Send worker to thread pool self.pool.start(dirrunnable) 方法。

我有竞争条件,因为有时代码会起作用,有时则不会。

所以我的问题是: 是否允许从给定类的方法向线程池发送新worker? 在这种情况下,您将如何处理新工作线程的创建和发送到线程池?

就我而言,方法processDirectory时我的dirrunable对象会发生什么? 池会将对象保留在其上下文中吗?

由于我遇到问题,我的想法是创建另一个包含池的线程,并通过队列接收目录路径以在该线程中创建worker。 但看起来很疯狂,我觉得我在这里错过了很多东西!

感谢您的帮助!

顺便说一下:无论我在互联网上看到什么,我得到的错误都无法理解:

processDirectory

1 个答案:

答案 0 :(得分:2)

如果某人有一天到达这个帖子。问题是你不允许在Qt中将模型放入线程中。所以我使用信号在主线程中更新模型解决了这个问题。