python线程join函数卡死_tkinter界面因线程join卡死的案例

在编写GUI程序的时候,对于比较耗时的操作(比如按一个Button开始长时间的计算),常规的思路都是扔给线程去计算,这样可以保持GUI界面不会出现卡死。我也是这么干的!由于希望界面上的Text控件还能输出计算过程的log,我在启动线程后,调用了线程的join函数。

python创建线程并启动后,可以通过调用线程的join函数进入阻塞状态,以此等待线程结束后再往下执行。我的初衷时,tkinter界面卡死没关系,线程在运行并在输出log(界面上的Text控件),这时界面卡死也是需要的,要等线程结束才能让用户按其它按钮。

结果,我遇到了deadlock,死锁!tkinter界面也因此彻底卡死。

分析了一下界面彻底卡死的原因,原来是这样的:

创建并启动线程后,调用线程的join函数,界面卡死等待线程执行结束;此时,tkinter界面的Text控件已经被join函数锁死;线程在计算过程中,需要访问Text控件写log,因此在写log的地方开始死等。死锁!

我的代码是这样的:

def __write():

1498 try:

1499 _name, _oui, _pn, _ver,_wlen, _sp, _sn, _date = __get_cont()

1500 except ValueError as e:

1501 eblog.error(repr(e))

1502 return

1503 rth = threading.Thread(

1504 target=_write_check_ven

你可能感兴趣的:(python线程join函数卡死_tkinter界面因线程join卡死的案例)