gpt4 book ai didi

python - WX.Python 和多处理

转载 作者:太空宇宙 更新时间:2023-11-04 06:30:09 24 4
gpt4 key购买 nike

我有一个 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 的机制是什么,但我希望快速谷歌搜索会找到答案(或者好心的评论者可能会提供链接 ;-)

关于python - WX.Python 和多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3854414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com