Python 中并行编程的意外输出:我做得对吗?

Unexpected output from parallel programming in Python: am I doing it correctly?

我正在尝试在 Python 中学习并行编程。作为起点,我决定编写一个程序来测试 multiprocessing 模块,然后再转到 'multiprocess' 模块(据我所知,不同之处在于 运行ge 可序列化对象在 'multiprocess' 模块中更大,因为它使用 dill 而不是 pickle)。

该程序的目的是测量使用 1 到 7 个进程对 range(1000) 中的数字求平方根所需的时间。我将这个程序循环了 80 次并生成了下图。

关于这个我有几个问题。

  1. 我是否正确实现了并行化?根据此数据,似乎更多的进程并不等于更少的时间。
  2. 为什么标准偏差这么大?

=========编辑======

问题 3 已回答

  1. 我 运行 这个程序两次,两次我的电脑(32Gb 内存、i7 处理器和 8 核)都崩溃了。为什么会这样?

此外,如果有人对 Python 中的并行编程有任何进一步的提示,我们将不胜感激。

干杯。

我用来生成数据的代码:

from multiprocessing import Pool
import numpy
import time
import pandas
import os
import matplotlib.pyplot as plt
import numpy

def sqrt(x):
    return numpy.sqrt(x)

num_repeats=100
num_processors=8

if __name__ == '__main__':
    for i in range(num_repeats):
        t=[]
        print 'repeat {}'.format(i)
        for j in range(num_processors):
            if j!=0:
                pool = Pool(j)
                start=time.time()
                results = [pool.apply_async(sqrt, (x,))for x in range(1000)]
                t.append( time.time()-start)
        df=pandas.DataFrame(pandas.Series(t))
        df= df.transpose()
        df.columns=['processor {}'.format(i) for i in range(num_processors-1)]
        df.to_csv(   os.path.join( os.getcwd(),'parallel_p_test.csv')  ,mode='a',header=True)

对于非常快速完成的操作,您会发现并行化不会带来太多好处,因为您将花费大量时间来处理进程同步的开销。

我建议用几秒钟的时间重试。

如果您的计算机崩溃了,那说明有严重问题。什么OS?日志中有什么吗?