Przykro mi, że nie mogę odtworzyć błędu na prostszym przykładzie, a mój kod jest zbyt skomplikowany, aby go opublikować. Jeśli uruchomię program w powłoce IPython zamiast zwykłego Pythona, wszystko zadziała dobrze.
Przejrzałem kilka wcześniejszych notatek na ten temat. Wszystkie zostały spowodowane przez użycie puli do wywołania funkcji zdefiniowanej w funkcji klasy. Ale tak nie jest w moim przypadku.
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
Byłbym wdzięczny za wszelką pomoc.
Aktualizacja : Funkcja I marynowana jest zdefiniowana na najwyższym poziomie modułu. Chociaż wywołuje funkcję, która zawiera funkcję zagnieżdżoną. tzn. f()
wywołuje g()
wywołania, h()
które mają funkcję zagnieżdżoną i()
, a ja dzwonię pool.apply_async(f)
. f()
, g()
, h()
Są określone na poziomie górnym. Próbowałem prostszego przykładu z tym wzorem i to działa.
dill
ipathos
. Jednak nie mam szczęścia do żadnego z rozwiązań podczas pracy z vtkobjects :( Ktoś zdążył uruchomić kod python w równoległym przetwarzaniu vtkPolyData?