получение данных из очереди в заданном порядке
Вопрос в том что part разной длины и грубо говоря если data[0] больше чем data[1], то data[1] достаётся раньше из очереди, а мне бы хотелось чтобы были по порядку, как part идут. Ждать пока data[0] будет готова, поместить её в выходную очередь, а потом уже data[1] туда положить, посоветуйте как такое реализовать.
from multiprocessing.dummy import Pool
from queue import Queue
def func(data):
rec = KaldiRecognizer(model, sample_rate)
for part in data:
if rec.AcceptWaveform(data):
queue.put(rec.Result())
else:
rec.PartialResult()
if rec.FinalResult() != '':
queue.put(rec.FinalResult())
return
with Pool as pool:
pool.map(func, data)
while not queue.empty():
print(queue.get())
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
В общем, по результатам дискуссии, на мой взгляд правильнее было бы сделать так, вообще без очереди. Данные в этом случае должны получиться в том же порядке, в каком они отправлялись в pool:
from multiprocessing.dummy import Pool
from queue import Queue
def func(data):
rec = KaldiRecognizer(model, sample_rate)
result = []
for part in data:
if rec.AcceptWaveform(data):
result.append(rec.Result())
else:
rec.PartialResult()
if rec.FinalResult() != '':
result.append(rec.FinalResult())
return result
with Pool() as pool:
for result in pool.map(func, data):
for item in result:
print(result)