Я исследовал этот вопрос несколько раз, но не нашел обходного пути, который либо работает в моем случае, либо тот, который я понимаю, поэтому, пожалуйста, несите меня.Как обойти ошибку травления многопроцессорности python, не находясь на верхнем уровне?
В принципе, у меня есть иерархическая организация функций, и это мешает мне многопроцессорствовать на верхнем уровне. К сожалению, я не верю, что могу изменить макет программы, потому что мне нужны все переменные, которые я создаю после начальных входов.
Например, у меня есть это:
import multiprocessing
def calculate(x):
# here is where I would take this input x (and maybe a couple more inputs)
# and build a larger library of variables that I use further down the line
def domath(y):
return x * y
pool = multiprocessing.Pool(3)
final= pool.map(domath, range(3))
calculate(2)
Это дает следующее сообщение об ошибке:
Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
Я думал глобалов, но я боюсь, что я должен был бы определить слишком много, и это может замедлить мою программу совсем немного. Есть ли какое-либо обходное решение без перестройки всей программы?
Вы можете прочитать ответ, который я выбрал, пытаясь решить [в значительной степени та же ошибка] (http://stackoverflow.com/questions/6234586/we-need-to-pickle-any-sort-of-callable). – motoku
Эй, Шон, посмотрев на ваш вопрос, я боюсь, что смогу выйти из глубины решения. В любом случае, вы могли бы дать мне более концептуальное изложение того, что делают эти функции при упаковке и распаковке? – Tim
Конечно. Позвольте мне собрать пример кода. – motoku