Многопроцессорность Python - объединение процессов - PullRequest
0 голосов
/ 20 июня 2019

Я экспериментирую с модулем 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, и я хочу назначить эти вызовы для отдельных процессов, чтобы выполнить их параллельно.Последующие итерации во внешнем цикле, однако, зависят от предыдущих результатов, поэтому внешний цикл не может быть распараллелен.

Мой вопрос: есть ли гарантия, что 15 процессов будут ждать друг друга на каждой итерации внешнего цикла, прежде чем вычислять sum?Другими словами, строго говоря о результате, является ли приведенный выше код всегда эквивалентным простому вызову f(x) вместо apply_async?

В более общем смысле вызов функции get() для результатов apply_asyncвсегда будете ждать в этот момент, пока не будут возвращены результаты всех процессов?

...