多处理无法并行化

时间:2018-10-03 17:40:07

标签: python multiprocessing

我有一个可以并行运行的函数,但是,当我尝试运行它时,似乎该函数被串行调用。

import multiprocessing as mp
def function_to_be_parallelized(x,y,z):
    #compute_array takes 1-5 minutes computation to depending on x,y,z
    computed_array=compute_array(x,y,z)
    print ("running with parameters"+str(x*y*z))
    return computed_array

def run(xs,ys,zs):

    pool = mp.Pool(processes=4)
    all_outputs = [pool.apply(function_to_be_parallelized, args=(x,y,z)) for x in xs for y in ys for z in zs]

我发现打印语句一次只能打印一次,并且每个语句仅在前一个过程完成后才打印,我正在4核机器上运行它。

这是因为内部函数中的每个进程占用两个以上的内核(因此无法并行化)吗?还是还有其他原因?

2 个答案:

答案 0 :(得分:2)

apply_async waits for the result to be ready,因此您不会在上一个工作完成之前提交新工作。您必须使用map printf(" "); 之类的东西,但是即使如此,也无法保证您会看到交错执行或无序执行,并且并行化的好处可能会被这样的功能的开销。

答案 1 :(得分:-2)

这对我来说还不错。等待打印缓冲区填充可能是一个问题。查看apply_async:https://docs.python.org/2/library/multiprocessing.html#multiprocessing.pool.multiprocessing.Pool.apply_async

另外, 正在调用print命令,除非其中有足够的内容,否则python不会将您的print发送到stdout。尝试将sys.stdout.flush()添加到function_to_be_parallellized中以强制尽快打印。