Применение модулей asyncio и queue для параллельной обработки фрагментов аудиофайла

Работа с аудио файлом. Необходимо получать временные метки начало-конец фраз и передавать их из цикла обработки дальше на повторную обработку более точным но долгим методом с распараллеливанием. С использованием asyncio и queue хочется, но не могу разобраться как реализовать, пока такой вариант:

def primary_process(stream):
    model = Model(small_model_path)
    rec = KaldiRecognizer(model, 16000)
    
    while True:
        data = stream.stdout.read(4000)
        if len(data) == 0:
            break
        if rec.AcceptWaveform(data):
            rec.Result()
            fragment = "{0:.1f}".format(partial_result["partial_result"][0]["start"], "{0:.1f}".format(partial_result["partial_result"][-1]["end"]
            ...
        else:
            partial_result = json.loads(rec.PartialResult())
    rec.FinalResult()

def secondary_process(stream_fragment):
    model = Model(big_model_path)
    rec = KaldiRecognizer(model, 16000)
    
    while True:
        data = stream_fragment.stdout.read(4000)
        if len(data) == 0:
            break
        if rec.AcceptWaveform(data):
            print(rec.Result())
        else:
            print(rec.PartialResult())
    print(rec.FinalResult())

def process(stream):
    stream_fragment = primary_process(stream)
    result = secondary_process(stream_fragment)

process(stream)

stream получаю через ffmpeg как sys.argv[1] Хотелось бы после получения фрагмента его сразу же переслать на вход вторичной обработки и продолжить получать новые фрагменты в тоже время. А во вторичной обработке просто выводить результаты. Посоветовали сделать 2 очереди, на пальцах понял как сделать, с кодом проблемы, мало практики.


Ответы (0 шт):