Lamento não poder reproduzir o erro com um exemplo mais simples, e meu código é muito complicado para postar. Se eu executar o programa no shell IPython em vez do Python comum, as coisas funcionam bem.
Procurei algumas notas anteriores sobre esse problema. Todos eles foram causados pelo uso de pool para chamar a função definida dentro de uma função de classe. Mas esse não é o meu caso.
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
Eu apreciaria qualquer ajuda.
Atualização : A função que eu seleciono é definida no nível superior do módulo. Embora chame uma função que contenha uma função aninhada. ou seja, f()
chama as g()
chamadas h()
que têm uma função aninhada i()
, e eu estou chamando pool.apply_async(f)
. f()
, g()
, h()
São todos definidos no nível superior. Eu tentei exemplo mais simples com esse padrão e funciona embora.
dill
epathos
. No entanto, eu não tive sorte com qualquer uma das soluções quando se trabalha com vtkobjects :( Alguém conseguiu executar código python em processamento paralelo vtkPolyData?