Ejemplo de multiprocesamiento dando AttributeError

Estoy tratando de implementar multiprocesamiento en mi código, y así, pensé que comenzaría mi aprendizaje con algunos ejemplos. Utilicé el primer ejemplo encontrado en esta documentación .

from multiprocessing import Pool def f(x): return x*x if __name__ == '__main__': with Pool(5) as p: print(p.map(f, [1, 2, 3])) 

Cuando ejecuto el código anterior obtengo un AttributeError: can't get attribute 'f' on . No sé por qué estoy recibiendo este error. También estoy usando Python 3.5 si eso ayuda.

Este problema parece ser una característica de diseño de multiprocessing.Pool. Ver https://bugs.python.org/issue25053 . Por alguna razón, Pool no siempre funciona con objetos no definidos en un módulo importado. Así que tienes que escribir tu función en un archivo diferente e importar el módulo.

Archivo: defs.py

 def f(x): return x*x 

Archivo: run.py

 from multiprocessing import Pool import defs if __name__ == '__main__': with Pool(5) as p: print(p.map(defs.f, [1, 2, 3])) 

Si utiliza la función de impresión o una función incorporada diferente, el ejemplo debería funcionar. Si esto no es un error (de acuerdo con el enlace), el ejemplo dado se elige mal.