Можно сделать несколько вызовов функции в python, используя joblib.
from joblib import Parallel, delayed
def normal(x):
print "Normal", x
return x**2
if __name__ == '__main__':
results = Parallel(n_jobs=2)(delayed(normal)(x) for x in range(20))
print results
Дает: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361]
Однако, что я действительно хочу, это вызвать функцию классав списке экземпляров классов параллельно.Функция просто хранит переменную класса.Позже я получу доступ к этой переменной.
from joblib import Parallel, delayed
class A(object):
def __init__(self, x):
self.x = x
def p(self):
self.y = self.x**2
if __name__ == '__main__':
runs = [A(x) for x in range(20)]
Parallel(n_jobs=4)(delayed(run.p() for run in runs))
for run in runs:
print run.y
Это выдает ошибку:
Трассировка (последний последний вызов):
Файл "", строка 1, в runfile ('G:/ Мой диск / CODE / stackoverflow / parallel_classfunc / parallel_classfunc.py ', wdir =' G: / Мой диск / CODE / stackoverflow / parallel_classfunc ')
Файл "C: \ ProgramData \ Anaconda2 \ lib \ site-packages \ spyder \ utils \ site \ sitecustomize.py ", строка 710, в исполняемом файле исполняемого файла (имя файла, пространство имен)
Файл" C: \ ProgramData \ Anaconda2 \ lib \ site-packages \ spyder \ utils \ site "\ sitecustomize.py ", строка 86, в execfile exec (compile (scripttext, filename, 'exec'), glob, loc)
Файл" G: / Мой диск / CODE / stackoverflow /rallel_classfunc / parallel_classfunc.py ", строка 12, параллельно (n_jobs = 4) (задерживается (run.p () для запуска в прогонах))
Файл" C: \ ProgramData \ Anaconda2 \ lib \ site-packages \ joblib \ "parallel.py ", строка 183, в отложенном pickle.dumps (функция)
Файл" C: \ ProgramData \ Anaconda2 \ lib \ copy_reg.py ", строка 70, в _reduce_ex вызывает TypeError," не можетмариновать объекты% s "% base. name
TypeError: невозможно выбрать объекты-генераторы
Как можно использовать joblib с такими классами, как этот?Или есть лучший подход?