paquete de multiprocesamiento en Python interactivo

Tengo el siguiente código test.py:

#multiprocessing in the interactive Python import time from multiprocessing import Process, Pipe def MyProcess(a): while(1): time.sleep(1) a.send("tic") if __name__ == "__main__": a, b = Pipe() p = Process(target=MyProcess, args=(a,)) p.start() while(1): msg=b.recv() print(msg) 

Funciona bien si lo ejecuto en el shell de DOS “python test.py”, pero no funciona si uso “Ejecutar archivo” de IEP (Pyzo).

 Traceback (most recent call last): File "", line 1, in  File "C:\pyzo2014a_64b\lib\multiprocessing\spawn.py", line 106, in spawn_main exitcode = _main(fd) File "C:\pyzo2014a_64b\lib\multiprocessing\spawn.py", line 116, in _main self = pickle.load(from_parent) AttributeError: Can't get attribute 'MyProcess' on  

Encontré que este es un “problema” documentado. Por favor, compruebe la respuesta del siguiente enlace.

multiprocesamiento de roturas en modo interactivo

¿Significa que no debo usar el paquete de multiprocesamiento del Python interactivo? ¿Significa que no puedo crear un proceso desde la consola IPython? Cualquier aclaración sobre esto será altamente apreciada.

Correcto, no puede usar el multiprocessing desde el intérprete … principalmente porque pickle no sabe cómo serializar funciones interactivas. Sin embargo, si usa una bifurcación de multiprocessing , llamada pathos.multiprocessing , puede hacer lo que quiera con el intérprete. Esto funciona porque pathos.multiprocessing usa dill , y dill sabe cómo serializar las funciones (y otros objetos) que están definidas en el intérprete.

 >>> from pathos.multiprocessing import ProcessingPool as Pool >>> >>> p = Pool(4) >>> def squared(x): ... return x**2 ... >>> def pow(x,y): ... return x**y ... >>> a = range(10) >>> b = range(10,0,-1) >>> >>> p.map(squared, a) [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> res = p.amap(pow, a, b) >>> print "asynchronous, and with multiple inputs!" asynchronous, and with multiple inputs! >>> res.get() [0, 1, 256, 2187, 4096, 3125, 1296, 343, 64, 9] 

Obtenga pathos aquí: https://github.com/uqfoundation