每个进程的Python多处理运行时间随着进程数的增加而增加

时间:2015-03-01 02:19:16

标签: python performance optimization python-multiprocessing

我有一个工作池,它们执行相同的相同任务,我发送每个相同数据对象的不同克隆。然后,我分别为每个进程工作函数中测量运行时间。

使用一个过程,运行时间为4秒。使用3个进程,每个进程的运行时间最多可达6秒。

随着更复杂的任务,这种增加更加微妙。

我的系统上没有运行其他cpu-hogging进程,并且工作人员不使用共享内存(据我所知)。运行时间是在worker函数内测量的,所以我认为分叉开销不重要。

为什么会这样?

def worker_fn(data):
    t1 = time()    
    data.process()
    print time() - t1
    return data.results


def main( n, num_procs = 3):       
    from multiprocessing import Pool
    from cPickle import dumps, loads 

    pool = Pool(processes = num_procs)
    data = MyClass()
    data_pickle = dumps(data)
    list_data = [loads(data_pickle) for i in range(n)]
    results = pool.map(worker_fn,list_data)

编辑:虽然我无法发布MyClass()的整个代码,但我可以告诉您它涉及大量的numpy矩阵操作。看起来numpy对OpenBlass的使用可能是某种原因。

0 个答案:

没有答案