Каждая функция в списке создается при создании экземпляра со своими собственными параметрами, а затем каждая для их оценки необходимо запустить произвольное количество раз с аргументами. Дела идут медленно, поэтому мне приходится распараллеливать его, но у меня возникают проблемы с травлением.
Я сократил сценарий до этого
Код: Выделить всё
import multiprocessing as mp
class task():
def parallelizationWrap(self):
poolSize = 5
with mp.Pool(poolSize) as pool:
for _ in pool.imap(self.parallelizationFunc, range(poolSize)):
pass
def serialWrap(self):
for _ in range(5):
self.parallelizationFunc()
def setup(self, unusedVar=None):
vallist = [1,2,3,4,5]
self.funclist = []
for i in range(5):
def tempfunc(argument, parameter=vallist[i]):
print(parameter*argument)
self.funclist.append(tempfunc)
def parallelizationFunc(self, unuserVar=None):
for j in range(5):
self.funclist[j](2)
if __name__ == "__main__":
mp.freeze_support()
c1 = task()
c1.setup()
c1.parallelizationWrap()
# c1.serialWrap()
Код: Выделить всё
AttributeError: Can't pickle local object 'task.setup..tempfunc'
Я также пытался сделать его глобальным, как рекомендовано здесь, но это привело к аналогичной проблеме с травлением: _pickle.PicklingError: невозможно выбрать : это не тот же объект, что и __main__.tempfunc
Подробнее здесь: https://stackoverflow.com/questions/790 ... a-function