Lamento no poder reproducir el error con un ejemplo más simple, y mi código es demasiado complicado para publicar. Si ejecuto el programa en el shell de IPython en lugar del Python normal, las cosas funcionan bien.
Busqué algunas notas anteriores sobre este problema. Todos fueron causados por el uso de grupo para llamar a la función definida dentro de una función de clase. Pero este no es el caso para mí.
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
Apreciaría cualquier ayuda.
Actualización : la función I pickle se define en el nivel superior del módulo. Aunque llama a una función que contiene una función anidada. es decir, f()
llama a g()
llamadas h()
que tienen una función anidada i()
, y estoy llamando pool.apply_async(f)
. f()
, g()
, h()
Están todos definidos en el nivel superior. Intenté un ejemplo más simple con este patrón y funciona.
dill
ypathos
. Sin embargo, no tuve suerte con ninguna de las soluciones cuando trabajo con vtkobjects :( ¿Alguien ha logrado ejecutar código python en procesamiento paralelo vtkPolyData?