我有一个CPU绑定的Python函数,在标准核心上运行大约需要15秒。我需要运行这个功能数万次。函数输入是一个大小约为10kB的数据集,因此与运行时相比,数据传输时间应该可以忽略不计。这些功能不需要相互通信。返回值是一个小数组。
我根本不需要同步这些功能。我所关心的只是当一个核心完成时,它会被委派一份新工作。
开始并行化此问题的好框架是什么?我希望能够在我自己的计算机和亚马逊单位上运行它。
Python的多处理模块可以解决这个问题吗?除了那个以外我会更好吗?
答案 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
使用多处理处理数据的方法很少。