Я хочу реализовать рекурсивный параллельный алгоритм, и я хочу, чтобы пул создавался только один раз, и каждый временной шаг выполнял задание, ждал завершения всех заданий, а затем снова вызывал процессы с входами предыдущих выходов, а затем снова то же самое в следующий временной шаг и т. д.
Моя проблема в том, что я реализовал версию, в которой каждый раз я создаю и уничтожаю пул, но это очень медленно, даже медленнее, чем последовательная версия. Когда я пытаюсь реализовать версию, в которой пул создается только один раз в начале, я получаю ошибку утверждения, когда пытаюсь вызвать join().
это мой код
def log_result(result):
tempx , tempb, u = result
X[:,u,np.newaxis], b[:,u,np.newaxis] = tempx , tempb
workers = mp.Pool(processes = 4)
for t in range(p,T):
count = 0 #==========This is only master's job=============
for l in range(p):
for k in range(4):
gn[count]=train[t-l-1,k]
count+=1
G = G*v + gn @ gn.T#==================================
if __name__ == '__main__':
for i in range(4):
workers.apply_async(OULtraining, args=(train[t,i], X[:,i,np.newaxis], b[:,i,np.newaxis], i, gn), callback = log_result)
workers.join()
X и b — это матрицы, которые я хочу обновить непосредственно в памяти мастера.
Что здесь не так, и я получаю ошибку утверждения?
Могу ли я реализовать с помощью пула то, что хочу, или нет?