Следующий код распараллеливает цикл for.
import networkx as nx;
import numpy as np;
from joblib import Parallel, delayed;
import multiprocessing;
def core_func(repeat_index, G, numpy_arrary_2D):
for u in G.nodes():
numpy_arrary_2D[repeat_index][u] = 2;
return;
if __name__ == "__main__":
G = nx.erdos_renyi_graph(100000,0.99);
nRepeat = 5000;
numpy_array = np.zeros([nRepeat,G.number_of_nodes()]);
Parallel(n_jobs=4)(delayed(core_func)(repeat_index, G, numpy_array) for repeat_index in range(nRepeat));
print(np.mean(numpy_array));
Как видно, ожидаемое значение для печати равно 2. Однако, когда я запускаю свой код в кластере (многоядерная, разделяемая память), он возвращает 0.0.
Я думаю, проблема в том, что каждый рабочий создает свою собственную копию объекта numpy_array
, а созданный в основной функции не обновляется. Как изменить код, чтобы можно было обновить массив numpy numpy_array
?