Прошу прощения, что я не могу воспроизвести ошибку с более простым примером, и мой код слишком сложный для публикации. Если я запускаю программу в оболочке IPython вместо обычного python, все будет хорошо.Ошибка трассировки многопроцессорности Python
Я искал некоторые предыдущие заметки по этой проблеме. Все они были вызваны использованием функции пула для вызова, определенной внутри функции класса. Но это не относится ко мне.
Exception in thread Thread-3:
Traceback (most recent call last):
File "/usr/lib64/python2.7/threading.py", line 552, in __bootstrap_inner
self.run()
File "/usr/lib64/python2.7/threading.py", line 505, in run
self.__target(*self.__args, **self.__kwargs)
File "/usr/lib64/python2.7/multiprocessing/pool.py", line 313, in _handle_tasks
put(task)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
Я был бы признателен за любую помощь.
UPDATE: Функция I pickle определена на верхнем уровне модуля. Хотя он вызывает функцию, содержащую вложенную функцию. i.e, f() вызывает g() вызовы h(), которые имеют вложенную функцию i(), и я вызываю pool.apply_async (f). f(), g(), h() определены на верхнем уровне. Я попробовал более простой пример с этим шаблоном, и он работает.
Ответ на верхний уровень/принятый ответ хорош, но это может означать необходимость переструктурирования кода, что может быть болезненным. Я бы рекомендовал всем, у кого есть эта проблема, также прочитать дополнительные ответы с использованием 'dill' и' patos'. Тем не менее, мне не повезло ни с одним из решений при работе с vtkobjects :(Кто-нибудь успел запустить python-код в параллельной обработке vtkPolyData? – Chris