multiprocessing.Pool en jupyter notebook funciona en linux pero no windows

Estoy tratando de ejecutar algunos cálculos independientes (a pesar de leer los mismos datos). Mi código funciona cuando lo ejecuto en Ubuntu, pero no en Windows (Windows Server 2012 R2), donde obtengo el error:

'module' object has no attribute ...

cuando bash utilizar multiprocessing.Pool (aparece en la consola del kernel, no como salida en el notebook)

(Y ya he cometido el error de definir la función DESPUÉS de crear el grupo, y también la he corregido, ese no es el problema).

Esto sucede incluso en los ejemplos más simples:

 from multiprocessing import Pool def f(x): return x**2 pool = Pool(4) for res in pool.map(f,range(20)): print res 

Sé que es necesario poder importar el módulo (y no tengo idea de cómo funciona esto cuando se trabaja en el portátil), y he oído hablar de IPython.Parallel , pero no he podido encontrar ninguna documentación o ejemplo.

Cualquier solución / alternativa sería bienvenida.

Lo publicaría como un comentario ya que no tengo una respuesta completa, pero lo enmendaré a medida que descubra lo que está sucediendo.

 from multiprocessing import Pool def f(x): return x**2 if __name__ == '__main__': pool = Pool(4) for res in pool.map(f,range(20)): print(res) 

Esto funciona. Creo que la respuesta a esta pregunta está aquí . En resumen, los subprocesos no saben que son subprocesos y están intentando ejecutar el script principal de forma recursiva.

Este es el error que me han dado, que nos da la misma solución:

 RuntimeError: An attempt has been made to start a new process before the current process has finished its bootstrapping phase. This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom in the main module: if __name__ == '__main__': freeze_support() ... The "freeze_support()" line can be omitted if the program is not going to be frozen to produce an executable.