Многопроцессорная обработка Python - независимая обработка каждой пары ключ-значение в словаре - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть словарь, который выглядит следующим образом:

sampleData = {'x1': [1,2,3], 'x2': [4,5,6], 'x3': [7,8,9]}

Мне нужно выполнить некоторые вычисления для каждой пары ключ-значение, передав данные в blackBoxFunction .Эта функция требует времени для обработки.Окончательный результат сохраняется в отдельном словаре finalValue = {}.

. Этот код используется для последовательного выполнения:

for key in sampleData.keys():
    finalValue[key] = []
    for i in range(0,len(sampleData[key])):
        for j in range(i,len(sampleData[key])):
            if(i!=j):
                finalValue[key].append(blackBoxFunction(sampleData[key][i],sampleData[key][j]))

Однако расчет для каждой пары ключ-значение не зависит отдруг друга.

Я хочу знать, как я могу использовать многопроцессорную библиотеку в своем коде для параллельного выполнения задачи.

Окончательная структура словаря будет выглядеть как входной словарь.

finalValue 
{'x1': [31, 43, 53], 'x2': [97, 110, 131], 'x3': [135, 164, 137]}

1 Ответ

0 голосов
/ 27 декабря 2018

Попробуйте что-нибудь вроде

from multiprocessing import Pool

def pair_black_box(data):
    key, values = data
    res = []
    for i in range(0, len(values)):
        for j in range(i, len(values)):
            if(i != j):
               res.append(blackBoxFunction(values[i], values[j]))
    return key, res

p = Pool(3)
finalValue = dict(p.map(pair_black_box, sampleData.items()))
...