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