在Python中使用多个CPU来实现非常快速的功能

时间:2016-11-02 07:34:27

标签: python parallel-processing multiprocessing

我所拥有的功能可以在1秒内循环10,000次。但是,我需要执行数十亿到数亿次的此功能。正如预期的那样,由于使用CPU的开销,使用带有4个内核的本地multiprocessing软件包会将10k循环减慢到1.5秒。使用multiprocessing中的chunksize参数帮助琐碎。有没有办法让多个进程以超过开销的速度调用此函数?

功能的截断版本:

rands = np.random.random((200, 1000000))

def randfunc(i):
    Q = np.concatenate([rands[:,[i]], rands[:,[i]] * rands[:,[i+1]]],axis=1)
    Q2 = np.dot(np.transpose(Q),Q)
    Q3 = np.linalg.inv(Q2) * Q2[1,1]
    return Q3

1 个答案:

答案 0 :(得分:0)

我能够使用ipyparallel包简单地使用map_sync而不是multiprocessing包将运行时间减少一半来并行化函数。我不确定为什么前一个包的开销比后者少,但对于前者,加载数据确实需要很长时间,而后者则在并行执行期间将rands识别为变量。但是,在这两种情况下,数据都存储在RAM中。如果有人读到这个并且知道ipyparallel更快的原因,请做评论。