Я новичок в Python multiprocessing
. У меня есть функция, которая возвращает значения и должна действовать параллельно. Ниже вы можете найти образец кода.
import multiprocessing as mp
from tqdm import tqdm
def foo(self):
arg_triplets = [(self.loc_x[ii], self.loc_y[jj], self.arg)
for ii in np.arange(0, self.nx) for jj in np.arange(0, self.ny)]
ctx = mp.get_context('fork')
max_proc = mp.cpu_count()-1
pool = ctx.Pool(processes=max_proc)
return_values = list(tqdm(pool.imap(target_foo, arg_triplets), total=nx*ny))
pool.close()
pool.join()
Итак, когда я запускаю эту процедуру один раз, все работает нормально. Функция target_foo
принимает тройки аргументов и возвращает все выходные значения в виде списка. Я могу следить за состоянием своего 8-ядерного процессора и видеть, что 7 из них работают одновременно. Но проблема начинается, когда я использую функцию foo
в for
l oop. Например, мне нужно собрать данные для нескольких foo
, которые мне не нужны параллельно. Итак, я создаю for
l oop, который последовательно вызывает foo
. Предполагается, что при каждом вызове foo
функция target_foo
работает параллельно. Проблема в том, что первый раз он работает параллельно, а со второго - нет. Что я делаю не так?