Мне жаль, что я не могу воспроизвести ошибку на более простом примере, а мой код слишком сложен для публикации. Если я запускаю программу в оболочке IPython вместо обычного 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
Буду признателен за любую помощь.
Обновление : функция, которую я выбираю, определяется на верхнем уровне модуля. Хотя он вызывает функцию, которая содержит вложенную функцию. то есть f()
называет g()
звонки, у h()
которых есть вложенная функция i()
, а я звоню pool.apply_async(f)
. f()
, g()
, h()
Все определены на уровне верхней. Я попробовал более простой пример с этим шаблоном, и он работает, хотя.
dill
иpathos
. Однако мне не повезло ни с одним из решений при работе с vtkobjects :( Кому-нибудь удалось запустить код Python при параллельной обработке vtkPolyData?