我有一个wx.python应用程序,它接受一些文件并在单击按钮时处理它们。我需要并行处理它们。
我在绑定按钮功能中使用此代码:
my_pool = multiprocessing.Pool(POOLSIZE)
results=[digest_pool.apply_async(self.fun, [args]) for file in list_files() ]
my_pool.close()
my_pool.join()
for result in results :
print result.get()
但是看起来这个代码根本没有运行,即使我打印一些有趣的东西。我没有得到任何结果,我的GUI应用程序卡住了。有人可以帮忙吗?这里有什么问题,如何使用我的wx框架类中的池多处理模块来解决它?
答案 0 :(得分:1)
看起来你正在遇到试图使用GUI工具包进行线程处理的人遇到的一个非常常见的问题。问题的核心是您必须永远不要阻止代码中的主GUI线程。图形工具包需要能够不断响应事件。当您执行my_pool.join()
调用时,您将主线程置于休眠状态,结果是您的整个进程似乎已锁定。
我对wxWidgets并不是特别熟悉,但我确信有一些关于如何使用线程的模式。从GUI线程中分离后台线程很容易,但通常会得到结果。您将需要某种异步“完成工作”事件,您可以在后台操作完成时将其发送到主GUI线程。究竟如何完成从工具包到工具包的不同。我不确定wxWidgets的机制是什么,但是我希望快速的谷歌搜索会找到答案(或者也许是一个评论者会提供链接; - )