Применение модулей 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 очереди, на пальцах понял как сделать, с кодом проблемы, мало практики.