【发布时间】:2018-02-09 21:02:24
【问题描述】:
我正在尝试利用Python3 中的concurrent.futures.ProcessPoolExecutor 来并行处理大型矩阵。代码的大体结构是:
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-bound 进程。最后,fetch_multiple 是一个函数,它并行运行多个f 实例并返回结果。
问题是在运行脚本后,所有 cpu 核心的繁忙度都低于 50%(见以下截图):
为什么所有核心都不忙?
我认为问题在于self.matrix 的大对象以及在进程之间传递行向量。我该如何解决这个问题?
【问题讨论】:
标签: python-3.x threadpool python-multithreading concurrent.futures process-pool