Завершение процессов в многопроцессорном коде

Подскажите, как правильно завершить отработанные процессы в многопроцессорном коде. В цикле вайл у меня должна быть проверка на то, что процессы все отработали, и цикл должен завершиться. С помощью принтов вижу, что цикл высчитывает все правильно в начале, а потом просто идет перебор отработанных процессов и код не может выдать финальный результат. Вся проблема в неправильном условии в except Empty как я понимаю

def main(folder):
    zero_tickers = []
    value_key = {}
    sorted_place = []
    tickers = []
    collector = multiprocessing.Queue()

    for last_folder in generate_filenames(folder):
        tickers.append(Ticker(last_folder, collector=collector))
    for ticker in tickers:
        ticker.start()

    while True:
        try:
            collect = collector.get()
            for key in collect:
                value = collect[key]
                if value == 0:
                    zero_tickers.append(key)
                else:
                    value_key[value] = key
                    sorted_place.append(value)
                    sorted_place.sort()
                    # break
        except Empty:
            for ticker in tickers:
                if ticker.is_alive():
                    print(ticker)
                else:
                    break

        for ticker in tickers:
            ticker.join()
        show_result(sorted_place, value_key, zero_tickers)

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

Автор решения: eri

Добавь таймаут чтоб получать ексепшн.

from queue import Empty
....
while True:
    try:
        collect = collector.get(True, 1)
....
    except Empty:
        for ticker in tickers:
            if ticker.is_alive():
                print(ticker)
            else:
                break
→ Ссылка