Я хотел бы парализовать некоторые вычисления и сохранить результаты в (скажем) списке.Я не могу сделать это, используя joblib
(и Python 3), вот минимальный пример:
import itertools
from joblib import Parallel, delayed
## Function to create an iterator
def get_iterator(target):
return itertools.product( ["A", "B"], [ target ])
## Polulates the target list
def my_fun(pair):
pair[1].append(pair[0])
print( "These are the contents of the iterator")
target = []
for pair in get_iterator(target):
print(pair)
# ('A', [])
# ('B', [])
print("Standard serial code populates the target list")
target = []
it = get_iterator(target)
for pair in it:
my_fun(pair)
print( target )
# ['A', 'B']
print("Parallelizing does not populate the list")
target = []
it = get_iterator(target)
Parallel(n_jobs=2)(delayed(my_fun)(pair) for pair in it )
print(target)
# []
Решение: используйте тот факт, что delayed
возвращает список по завершении https://stackoverflow.com/a/34894862/3670097