Я использую очередь для обмена сообщениями между фоновым потоком и 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, когда фоновый поток заполняет очередь, но я боюсь, что это дает мне некоторые проблемы concurrency - вот почему Im использует очереди в конце концов.)