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.