получение данных из очереди в заданном порядке

Вопрос в том что 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)
→ Ссылка