我编写了一个聊天程序并使用 Tkinter 运行了一个 GUI,为了检查新消息何时到达,我创建了一个新线程,以便 Tkinter 在新线程运行并获取我需要的内容并更新时继续做它的事情而不会锁定Tkinter 窗口。然而,这变成了一个巨大的 CPU 消耗,我的猜测是它与线程已启动并且在函数完成时从未真正释放的事实有关。
这是相关代码(它很丑,目前没有优化,但它完成了工作,并且本身并没有使用太多的处理能力,因为当我运行它不是线程时,它不会占用太多 CPU 但它会锁定向上 Tkinter)
def interim(self):
threading.Thread(target=self.readLog).start()
self.after(5000,self.interim)
def readLog(self):
print 'reading'
try:
length = len(str(self.readNumber))
f = open('chatlog'+str(myport),'r')
temp = f.readline().replace('\n','')
while (temp[:length] != str(self.readNumber)) or temp[0] == '<':
temp = f.readline().replace('\n','')
while temp:
if temp[0] != '<':
self.updateChat(temp[length:])
self.readNumber +=1
else:
self.updateChat(temp)
temp = f.readline().replace('\n','')
f.close()
except: pass
有没有办法更好地管理线程,这样我就不会很快消耗 > 100% 的 CPU?