以下代码并行化了一个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。
我认为问题在于每个 worker 都创建了自己的 numpy_array
对象副本,而主函数中创建的那个并没有更新。我该如何修改代码,使得 numpy 数组 numpy_array
可以被更新?