Đoạn mã sau song song một vòng lặp for.Làm thế nào để ghi vào một biến chia sẻ trong 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));
Như có thể thấy, giá trị dự kiến sẽ được in là 2. Tuy nhiên, khi tôi chạy mã của tôi trên một cụm (đa lõi, bộ nhớ chia sẻ), nó sẽ trả 0.0.
Tôi nghĩ rằng vấn đề là mỗi nhân viên tạo ra một bản sao riêng của đối tượng numpy_array
và đối tượng được tạo trong chức năng chính không được cập nhật. Làm thế nào tôi có thể sửa đổi mã sao cho mảng có thể được cập nhật numpy_array
?
Vì vậy, bạn đã quyết định câu trả lời chưa? ;-) –