我正在使用队列在后台线程和Tk GUI应用程序之间交换消息.目前,这是通过不时调用查询方法来完成的.
def read_queue(self):
try:
self.process(self.queue.get(False)) # non-blocking
except Queue.Empty:
pass
finally:
self.after(UPDATE_TIME, self.read_queue)
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是,如果UPDATE_TIME太大,应用程序将比可能的更慢地处理新项目.如果它太小,Tk花费大部分时间来检查队列,虽然它可以在此期间做其他事情.
有没有办法read_queue在新项目到达队列时自动触发方法?(当后台线程填满队列时,我当然可以在Tk上调用一个方法,但我担心这会给我带来一些并发问题 - 这就是我毕竟使用队列的原因.)