我正在使用python 2.7和wxpython 2.8创建一个应用程序,它应该在文件列表上执行一个长循环(几个小时)。
我编写了一个按钮,当我按下它时应该中断循环,但是当我启动应用程序时,它会冻结,我无法以任何方式进行交互,直到循环结束。
我还尝试用time.sleep
添加一小段睡眠,最多1秒,这对速度非常不利,并且无法解决问题。
有没有办法在“后台”运行这个循环,这样用户仍然可以修改一些参数,更重要的是停止循环?
我可以说它不需要大量资源的循环,它只需要很多时间,所以我不明白为什么它会冻结。
提前感谢您的帮助!
答案 0 :(得分:1)
在标准解决方案中使用线程来解决此类问题。进程和事件下的wxPython演示| Threads有一个使用线程的工作示例。
从wxPython(以及大多数其他guis)运行线程时有一些问题,所以你可能想要阅读示例中的注释,也许是wiki来了解正在发生的事情,等等。特别是,wxPython需要从主线程运行,所以在不同的线程中进行文件处理,然后你的文件处理应该使用像wx.PostEvent或wx.CallAfter这样的主线程进行通信。