Mi dispiace non poter riprodurre l'errore con un esempio più semplice e il mio codice è troppo complicato per essere pubblicato. Se eseguo il programma nella shell IPython invece del normale Python, le cose funzionano bene.
Ho cercato alcune note precedenti su questo problema. Sono stati tutti causati dall'uso del pool per chiamare la funzione definita all'interno di una funzione di classe. Ma questo non è il caso per me.
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
Gradirei qualsiasi aiuto.
Aggiornamento : la funzione I pickle è definita al livello superiore del modulo. Anche se chiama una funzione che contiene una funzione nidificata. vale a dire, f()
chiama le g()
chiamate h()
che hanno una funzione nidificata i()
e io sto chiamando pool.apply_async(f)
. f()
, g()
, h()
Sono tutti definiti a livello superiore. Ho provato un esempio più semplice con questo modello e funziona però.
dill
epathos
. Tuttavia, non ho fortuna con nessuna delle soluzioni quando si lavora con vtkobjects :( Chiunque è riuscito a eseguire il codice Python nell'elaborazione parallela vtkPolyData?