有一个耗时的函数,想和UI独立开,用两个线程来做,通过 queue 传递信息,
ret = fun_a() # 某个不耗时函数
if ret:
self.queue.put({
"game": self})
print("before" + str(time.ctime()))
ret2 = self.iterative_deepening(3) # 某个耗时函数
if ret2:
self.queue.put({
"game": self})
print("after" + str(time.ctime()))
然后UI这边是这么写的:
def queue_handler(self):
try:
task = self.queue.get(block=False)
# 这里画界面
self.bg.after(10, self.queue_handler)
except queue.Empty:
self.bg.after(10, self.queue_handler)
main函数是这样的:
window = Tk()
que = queue.Queue(maxsize=2)
gui = GUI(window, que)
t1 = threading.Thread(target=PVE, args=(window, que))
t1.setDaemon = True
t1.start()
window.mainloop()
这里的坑就在于,在UI这里我print task的话,会发现他每次都只取出了ret2之后的game,ret 不知道是否进入了队列。
是哪里写错了呢