Python多进程循环

时间:2013-08-06 14:44:52

标签: python loops multiprocessing

我正在使用PyMC进行MCMC计算。 我的数据由47个部分组成,每个部分的形状为24 * 1000。

为了让MCMC工作,我在47个部分中创建了一个大型阵列,所以我现在有一个(1128)* 1000阵列。

然后拟合的模型创建相同大小的数组。 它在循环中执行此操作,因为对于47个零件中的每一个,都有不同的值必须加载(如缩放因子)。

让我们说地图是我的阵列:

for i in range(len(map[::])/47):

  scale = scale_all[i]

  self.trans_calc["t"] = 0.   
  self.trans_calc.xyzPos()
  pos0 = self.trans_calc.calc_pos1()

  for k in range(24):

    self.trans_calc["t"] = self.time[k]               
    self.trans_calc.xyzPos()

    if self.trans_calc.onstar() == False: 

        curve = pos0

    else:

        pos1 = self.trans_calc.calc_pos1()
        curve = pos0 - pos1 + 1.0 * scale

    map[k+i*47] = curve

return map

由于47个部分彼此独立,如果我使用多处理,我会得到加速。

我只是不明白我必须如何设置才能在地图中写出正确的位置。 我已经搜索了一个解决方案但没找到的东西。或者我不明白我发现了什么。

1 个答案:

答案 0 :(得分:0)

我没有使用PyMC的经验,我很难看到你在代码中做了什么。但是如果进程是独立的,你应该以一种方式编写脚本,你可以在返回结果的函数上“映射”链的每个部分。

from multiprocessing import Pool
pool = Pool(processes=8)              
result = pool.map(build_markov_chain, list_of_input_arrays)  

以这种方式,结果与输入的顺序相同。因此,我建议将它们保存为包含47个形状为24 * 1000的数组的列表,而不是构建一个(1128)* 1000数组。