Как избежать ошибки травления при определении функции внутри функции?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как избежать ошибки травления при определении функции внутри функции?

Сообщение Anonymous »

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

Код: Выделить всё

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»