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.Error de decapado por multiproceso de Python
He buscado algunas notas anteriores sobre este problema. Todos fueron causados por el uso de la función pool to call 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
Agradeceria 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() llama a h() que tiene una función anidada i(), y estoy llamando a 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 bien.
La respuesta de nivel superior/aceptado es buena, pero podría significar que necesita volver a estructurar el código, lo que podría ser doloroso. Recomendaría a cualquiera que tenga este problema que también lea las respuestas adicionales utilizando 'eneldo' y' pateado'. Sin embargo, no tuve suerte con ninguna de las soluciones al trabajar con vtkobjects :(Cualquiera ha logrado ejecutar el código python en el procesamiento paralelo vtkPolyData? – Chris