Je suis désolé de ne pas pouvoir reproduire l'erreur avec un exemple plus simple et mon code est trop compliqué à publier. Si j'exécute le programme dans le shell IPython au lieu du Python normal, les choses fonctionnent bien.
J'ai recherché quelques notes précédentes sur ce problème. Ils ont tous été causés par l'utilisation de pool pour appeler la fonction définie dans une fonction de classe. Mais ce n'est pas le cas pour moi.
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
J'apprécierais toute aide.
Mise à jour : La fonction I pickle est définie au niveau supérieur du module. Bien qu'il appelle une fonction qui contient une fonction imbriquée. c'est-à-dire, f()
appelle des g()
appels h()
qui ont une fonction imbriquée i()
, et j'appelle pool.apply_async(f)
. f()
, g()
, h()
Sont tous définis au niveau supérieur. J'ai essayé un exemple plus simple avec ce modèle et cela fonctionne cependant.
dill
etpathos
. Cependant, je n'ai aucune chance avec l'une des solutions lorsque je travaille avec vtkobjects :( N'importe qui a réussi à exécuter du code python en traitement parallèle vtkPolyData?