WX.Python和多处理

时间:2010-10-04 10:38:43

标签: python multithreading wxpython wxwidgets

我有一个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框架类中的池多处理模块来解决它?

1 个答案:

答案 0 :(得分:1)

看起来你正在遇到试图使用GUI工具包进行线程处理的人遇到的一个非常常见的问题。问题的核心是您必须永远不要阻止代码中的主GUI线程。图形工具包需要能够不断响应事件。当您执行my_pool.join()调用时,您将主线程置于休眠状态,结果是您的整个进程似乎已锁定。

我对wxWidgets并不是特别熟悉,但我确信有一些关于如何使用线程的模式。从GUI线程中分离后台线程很容易,但通常会得到结果。您将需要某种异步“完成工作”事件,您可以在后台操作完成时将其发送到主GUI线程。究竟如何完成从工具包到工具包的不同。我不确定wxWidgets的机制是什么,但是我希望快速的谷歌搜索会找到答案(或者也许是一个评论者会提供链接; - )