执行两次后,Tkinter线程冻结

时间:2017-01-17 21:00:34

标签: python multithreading python-2.7 tkinter

我最近开始使用多线程来例如在for循环期间提供输入。这是成功的,但我想尝试更多。 当我尝试与Tkinter结合使用线程时出错了。 所以对于我的例子,我有一个非常简单的片段代码(Python 2.7.11)。我意识到它胜过了线程,但它显示了我的问题:

import Tkinter
import threading


def func():
    root=Tkinter.Tk()       #Open Tkinter window
    Tkinter.mainloop()
    root.quit()             #Extra quit, although it doesn't seem to help

thread1=threading.Thread(target=func)
thread1.start()

thread1.join()              #Wait for thread to end (for me to close the window)
del thread1                 #Extra deletes (although they don't seem to help)
del func

运行此代码一次正常。 Tkinter窗口打开,我手动关闭它,其余工作正常。但是,如果我再次运行它,解释器会冻结。如果添加第二个线程或简单的松散打印语句,它甚至不会启动它们。整个enterpreter冻结,我只能通过重新启动内核重新运行此代码。 那么我是否必须以特殊方式退出线程/ Tkinter以防止这种情况发生?

其他信息: 我的CPU使用率上升了。运行它时,第二次任务管理器显示高达30%的CPU使用率。所以我想某个地方会出现无限循环。 我已经读过Tkinter没有很好地处理线程,但我已经看到了这种情况。我在这里有一个非常简单的事情,所以它一定是我做错了。 希望有人可以帮助我,因为我无法以任何方式找到答案谷歌。

提前致谢。

0 个答案:

没有答案