Tkinter: Подождите, пока элемент в очереди

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

11
задан Debilski 21 August 2011 в 22:12
поделиться