@Vladislav_Polikarpov

Как объединить результаты всех процессов Pool?

Не могу объединить результаты всех процессов Pool. Словарь outcomes содержит лишь 288 элементов из 411 необходимых. Вероятно это 1 или 2 потока из 3-х. Ниже код.

from itertools import repeat
from multiprocessing import Pool, Manager


def reader(entry, outcomes): #other args are constant
   .............................................
   #Some condition:
   prediction = min(distances) + (mlc_data[min(distances)[1]],)
   outcomes[entry_pairs[' '.join(entry)]] = prediction
   return outcomes

manager = Manager()
outcomes = manager.dict()
with Pool(3) as p:
  output = p.starmap(reader, zip(input[0], repeat(outcomes)))
  p.close()
  p.join()


В тоже время словарь output содержит 411** 2 элементов, что указывает на то, что код плохо оптимизирован.
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
Mike_Ro
@Mike_Ro Куратор тега Python
Python, JS, WordPress, SEO, Bots, Adversting
Используйте outcomes после выполнения Pool, попробуйте так:
from itertools import repeat
from multiprocessing import Pool, Manager

def reader(entry, outcomes):
    # ...
    
    prediction = min(distances) + (mlc_data[min(distances)[1]],)
    outcomes[entry_pairs[' '.join(entry)]] = prediction

manager = Manager()
outcomes = manager.dict()

with Pool(3) as p:
    # Обрабатываем каждый элемент из input[0] и сохраняем результаты в outcomes:
    p.starmap(reader, zip(input[0], repeat(outcomes)))
    p.close()
    p.join()

print(outcomes)  # должен содержать все элементы
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы