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