【发布时间】:2013-11-05 03:41:43
【问题描述】:
我编写了一个聊天程序并使用 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?
【问题讨论】:
-
您的缩进混淆了,这使得无法确定您的代码是如何工作的。
-
对不起,我刚刚意识到并改变了它。
标签: python multithreading io tkinter python-multithreading