我正在尝试利用concurrent.futures.ProcessPoolExecutor
来Python3
并行处理一个大型矩阵。代码的一般结构是:
class X(object):
self.matrix
def f(self, i, row_i):
<cpu-bound process>
def fetch_multiple(self, ids):
with ProcessPoolExecutor() as executor:
futures = [executor.submit(self.f, i, self.matrix.getrow(i)) for i in ids]
return [f.result() for f in as_completed(futures)]
self.matrix
是一个大的scipy csr_matrix。f
是我的并发函数,它需要一行self.matrix
并在其上应用一个CPU 绑定的进程。最后,fetch_multiple
是一个并行运行多个实例f
并返回结果的函数。
问题是在运行脚本后,所有 cpu 核心的繁忙程度都低于 50%(见以下截图):
为什么所有核心都不忙?
self.matrix
我认为问题在于进程之间传递行向量的大对象。我怎么解决这个问题?