为什么这个多处理代码比串行代码慢?

时间:2017-05-15 16:45:10

标签: python parallel-processing python-multiprocessing

我在集群计算设备上尝试了以下python程序,包括顺序和并行版本。我可以清楚地看到(使用top命令)启动并行程序的更多进程。但是,当我计时时,似乎并行版本需要更多时间。可能是什么原因?我附上了代码和时间信息。

#parallel.py
from multiprocessing import Pool
import numpy
def sqrt(x):
 return numpy.sqrt(x)
pool = Pool()
results = pool.map(sqrt, range(100000), chunksize=10)
#seq.py
import numpy
def sqrt(x):
 return numpy.sqrt(x)
results = [sqrt(x) for x in range(100000)]
user@domain$ time python parallel.py > parallel.txt
real    0m1.323s
user    0m2.238s
sys     0m0.243s

user@domain$ time python seq.py > seq.txt
real    0m0.348s
user    0m0.324s
sys     0m0.024s

1 个答案:

答案 0 :(得分:1)

每项任务的工作量远远不足以弥补工作分配开销。首先,您应该增加chunksize,但仍然只有一个平方根操作太短,无法弥补在进程之间发送数据的成本。您可以从以下内容中看到有效的加速:

def sqrt(x):
  for _ in range(100):
    x = numpy.sqrt(x)
  return x
results = pool.map(sqrt, range(10000), chunksize=100)