Завершение процессов в многопроцессорном коде
Подскажите, как правильно завершить отработанные процессы в многопроцессорном коде. В цикле вайл у меня должна быть проверка на то, что процессы все отработали, и цикл должен завершиться. С помощью принтов вижу, что цикл высчитывает все правильно в начале, а потом просто идет перебор отработанных процессов и код не может выдать финальный результат. Вся проблема в неправильном условии в 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