以下代碼將for循環並行化。如何在python joblib中寫入共享變量
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
可以更新?
那麼,你有沒有決定答案? ;-) –