Python多重处理-加入流程

时间:2019-06-20 19:36:15

标签: python python-multiprocessing

我正在尝试multiprocessing模块。考虑以下代码:

import multiprocessing

#simple function
def f(x):
    return x**2

S = 0

#create workers
pool = multiprocessing.Pool(15) 

#outer loop
for x_min in range(20):
    results = []
    for x in xrange(x_min, x_min+15):
        #new process for each x value
        results.append(pool.apply_async(f, args=(x,)))

    #is it guaranteed that processes will join here?
    S = S+sum([res.get() for res in results])
    print S

这个想法是我有一个外循环,其中有一个内循环。内部循环为一系列f(x)值调用函数x,我想将这些调用分配给单独的进程,以便并行执行它们。但是,外循环中的后续迭代取决于先前的结果,因此外循环无法并行化。

我的问题是:在计算sum之前,是否可以保证15个进程在外循环的每次迭代中都互相等待?换句话说,严格地讲,上面的代码是否始终等同于简单地调用f(x)而不是apply_async

更笼统地说,是在get()的结果上调用apply_async函数总是要等到返回所有过程的结果吗?

0 个答案:

没有答案