¿Puedo obtener un valor de retorno de multiprocessing.Process?

He implementado un simple paralelismo en un código de Monte Carlo utilizando el módulo de multiprocesamiento de Python. Tengo un código que se parece a:

montecarlos = [MonteCarlo(f,fargs) for fargs in farglist] jobs = [multiprocessing.Process(mc) for mc in montecarlos] for job in jobs: job.start() for job in jobs: job.join() results = [mc.results for mc in montecarlos] 

Sin embargo, cuando miro la lista de resultados, parece que los iteradores de Monte Carlo ni siquiera han comenzado. Sé que lo han hecho, porque puedo hacer que los procesos impriman información durante los pasos de Monte Carlo. Así que estoy haciendo algo tonto. Pensé que el job.join () evitaría que la lista de resultados se construyera hasta que todo se hubiera ejecutado, y así se actualizaría el campo mc.results.

Me doy cuenta de que no te he contado los detalles de mi rutina de monte carlo, y espero que no importe, y que el error que estoy cometiendo está en mi interpretación de lo que hace el multiprocesamiento. Gracias de antemano por cualquier ayuda que pueda ofrecer.

Los objetos MonteCarlo se han decapado y enviado a procesos secundarios para su ejecución: el atributo .results en este proceso no se rellena porque nunca se ha ejecutado el mc local.

Si creas un multiprocessing.Queue , puedes pasarlo a cada trabajo de MonteCarlo , y cuando termine, debería poner el resultado allí. Entonces, el nivel superior puede esperar los valores de la cola. (Debajo de la campana, esto decapitará y deshará el objeto resultante).

 result_queue = multiprocessing.Queue() montecarlos = [MonteCarlo(result_queue, f,fargs) for fargs in farglist] jobs = [multiprocessing.Process(mc) for mc in montecarlos] for job in jobs: job.start() for job in jobs: job.join() results = [result_queue.get() for mc in montecarlos]