Как дождаться нескольких предметов в очереди, прежде чем начать потребителя - PullRequest
0 голосов
/ 07 марта 2020

Я реализую шаблон «Производящий-потребляющий», используя модуль очереди из python3. Производитель использует байтовые потоки через websocket, а потребитель воспроизводит аудио в режиме реального времени. Поскольку они имеют почти одинаковую скорость производства / потребления данных, звук прерывистый, если очередь достигает размера 0.

Я хочу запустить потребителя, только если в очереди хотя бы n элементов (аналогично имея буфер во время воспроизведения видео). Как я могу реализовать это правильно? Удастся ли присвоить глобальные переменные условию гонки?

global queue
global warm_start = False

def produce():
    queue.put(data)
    if queue.qsize() > 5:
        warm_start = True

def consume():
   queue.get(data)

Thread(target=produce).start()
while True:
    if warm_start:
        Thread(target=consume).start()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...