Skip to main content
 首页 » 编程设计

python之WX.Python 和多处理

2025年05月04日13EasonJim

我有一个 wx.python 应用程序,它获取一些文件并在单击按钮时处理它们。我需要并行处理它们。

我在绑定(bind)按钮函数中使用这段代码:

  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() 

但似乎这段代码根本没有运行,即使我在 fun 上打印了一些东西。我没有得到任何结果,我的 GUI 应用程序卡住了。有人可以帮忙吗?这里的问题是什么?如何使用我的 wx 框架类中的池多处理模块解决它?

请您参考如下方法:

看起来您遇到了一个非常普遍的问题,人们在尝试将线程与 GUI 工具包结合使用时会遇到这种问题。问题的核心是您绝不能阻塞代码中的主 GUI 线程。图形工具包需要能够不断响应事件。当您执行 my_pool.join() 调用时,您会让主线程进入休眠状态,结果是您的整个进程似乎都已锁定。

我对 wxWidgets 不是特别熟悉,但我确信有一些模式可以说明如何使用它来处理线程。从 GUI 线程分离后台线程很容易,但返回结果通常是诀窍。您将需要某种异步的“工作完成”事件,您可以在后台操作完成时将其发送到主 GUI 线程。具体如何做到这一点因工具包而异。我不确定 wxWidgets 的机制是什么,但我希望快速谷歌搜索会找到答案(或者好心的评论者可能会提供链接 ;-)