并行化CPU绑定的Python函数

时间:2013-08-12 04:02:46

标签: python parallel-processing multiprocessing amazon

我有一个CPU绑定的Python函数,在标准核心上运行大约需要15秒。我需要运行这个功能数万次。函数输入是一个大小约为10kB的数据集,因此与运行时相比,数据传输时间应该可以忽略不计。这些功能不需要相互通信。返回值是一个小数组。

我根本不需要同步这些功能。我所关心的只是当一个核心完成时,它会被委派一份新工作。

开始并行化此问题的好框架是什么?我希望能够在我自己的计算机和亚马逊单位上运行它。

Python的多处理模块可以解决这个问题吗?除了那个以外我会更好吗?

1 个答案:

答案 0 :(得分:2)

如果不需要通信 - 最简单的方法是Pool.map。它类似于map函数,但在子进程之一中处理迭代。

import multiprocessing
pool = multiprocessing.Pool(processes=4)
def fu(chunk):
    #your code here
    return result

def produce_data(data):
    while data:
        #you need to split data
        yield chunk

result = pool.map(fu,produce_data(data))
# result will be ordered list of results for each chunk

使用多处理处理数据的方法很少。