Могу ли я получить возвращаемое значение из multiprocessing.Process?

Я реализовал простой параллелизм в коде Монте-Карло, используя модуль многопроцессорности Python. У меня есть код, который выглядит примерно так:

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]

Однако, когда я смотрю на список результатов, кажется, что итераторы Монте-Карло еще даже не запустились. Я знаю, что они есть, потому что я могу заставить процессы распечатать информацию во время шагов Монте-Карло. Так что я делаю что-то тупое. Я думал, что job.join () предотвратит создание списка результатов до тех пор, пока все не будет запущено, и поэтому поле mc.results будет обновлено.

Я понимаю, что не рассказал вам подробностей моей процедуры в Монте-Карло, и надеюсь, что это не имеет значения, и что я делаю ошибку в моей интерпретации того, что делает многопроцессорность. Заранее благодарим за любую помощь, которую вы можете предложить.

31
задан atp 17 July 2012 в 19:40
поделиться