【发布时间】:2018-03-21 08:07:01
【问题描述】:
以下代码并行化了一个 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?
【问题讨论】:
-
那么,你决定好答案了吗? ;-)
标签: python parallel-processing shared-memory joblib