【发布时间】:2011-10-31 18:35:04
【问题描述】:
我正在使用队列在后台线程和 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)
这种方法的问题是,如果UPDATE_TIME 太大,应用程序处理新项目的速度会比可能的慢。如果太小,Tk 会花费大部分时间检查队列,但同时它可以做其他事情。
有没有办法在有新项目到达队列时自动触发read_queue 方法? (当后台线程填满队列时,我当然可以在 Tk 上调用一个方法,但我担心这会给我带来一些并发问题——毕竟这就是我使用队列的原因。)
【问题讨论】:
-
显然您可以使用后台线程中的 event_generate 在您的 GUI 中触发虚拟事件。也许这可以用作一种关于队列状态的通知。 groups.google.com/group/comp.lang.python/browse_thread/thread/…
-
似乎工作正常。随意添加它作为真正的答案。
标签: python multithreading event-handling tkinter