2

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

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

什么是开始并行化这个问题的好框架?我希望能够在我自己的电脑和亚马逊设备上运行它。

Python 的多处理模块能解决问题吗?除此之外,我会更好吗?

4

1 回答 1

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

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

于 2013-08-12T04:44:23.947 回答