Python, распараллеливание с joblib: задержка с несколькими аргументами

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

from joblib import Parallel, delayed
import numpy

def processInput(i,j):
    for k in range(len(i)):
        i[k] = 1
    for t in range(len(b)):
        j[t] = 0
return i,j

a = numpy.eye(3)
b = numpy.eye(3)

num_cores = 2
(a,b) = Parallel(n_jobs=num_cores)(delayed(processInput)(i,j) for i,j in zip(a,b))

но я получаю следующую ошибку: слишком много значений для распаковки (ожидается 2)

есть ли способ вернуть 2 значения с задержкой? Или какое решение вы бы предложили?

кроме того, немного OP, есть ли более компактный способ, например, следующий (который фактически ничего не изменяет) для обработки матриц?

from joblib import Parallel, delayed
def processInput(i,j):
    for k in i:
        k = 1
    for t in b:
        t = 0
return i,j

Я хотел бы избегайте использования has_shareable_memory в любом случае, чтобы избежать возможных плохих взаимодействий в фактическом скрипте и более низких исполнениях(?)

1 ответов


вероятно, слишком поздно, но как ответ на первую часть вашего вопроса: Просто верните Кортеж в функцию delayed.

return (i,j)

и для переменной, содержащей выходные данные всех ваших отложенных функций

results = Parallel(n_jobs=num_cores)(delayed(processInput)(i,j) for i,j in zip(a,b))

теперь результаты-это список кортежей, каждый из которых содержит некоторые (i, j), и вы можете просто перебирать результаты.