在python中并行化循环

时间:2016-11-23 13:53:56

标签: python

我的代理人口数为10,000,每个代理人的位置为[x,y],其中x和y是0到100之间的随机数。我想计算每个代理之间的距离,并确定它们是否是邻居然后将这些信息存储在10000x10000阵列中。到目前为止,我已经提出以下建议:

for j in range(len(agents_population[1])):
    B[j,j:10000] = [
        True if distance.euclidean(agents_population[1][j],
            agents_population[1][i]) < r 
        else False for i in range(j,len(agents_population[1]))
      ]

其中 agents_population [1] 是代理人坐标列表(因此在这种情况下,10000项目的2项目列表列表:[[x1,y1],[x2,y2]。 ..), r 是半径, B 是该数组。在每次迭代中,我计算代理 j 和代理 j + 1 到9999之间的距离。但是,循环的每次迭代都是相互独立的,所以我想我可以使用我的处理器的所有四个核心而不是一个。我尝试使用multiprocessing模块和Pool()。map()函数,但我无法使其工作。我真的很感激任何建议。

编辑:

我尝试使用multiprocessin,如下所示:

def worker(j):
    B[j,j:10000] = [
        True if distance.euclidean(agents_population[1][j],
            agents_population[1][i]) < r 
        else False for i in range(j,len(agents_population[1]))
      ]

def mp_handler():
    p = Pool(4)
    p.map(worker, range(0))

if __name__ == '__main__':
    mp_handler() 

B[0,].tofile('foo.csv',sep=',')

我通过cmd.exe运行它,但是当我打开文件foo.csv时,与运行j = 0的函数worker时的结果不同。我做错了吗?

0 个答案:

没有答案