Tôi có chức năng lấy id nút của biểu đồ làm đầu vào và tính toán thứ gì đó trong biểu đồ (không thay đổi đối tượng đồ thị), sau đó lưu kết quả trên hệ thống tệp, mã của tôi trông giống như sau:Làm thế nào để tiết kiệm bộ nhớ trong khi sử dụng Multiprocessing trong Python?
...
# graph file is being loaded
g = loadGraph(gfile='data/graph.txt')
# list of nodeids is being loaded
nodeids = loadSeeds(sfile='data/seeds.txt')
import multiprocessing as mp
# parallel part of the code
print ("entering the parallel part ..")
num_workers = mp.cpu_count() # 4 on my machine
p = mp.Pool(num_workers)
# _myParallelFunction(nodeid) {calculate something for nodeid in g and save it into a file}
p.map(_myParallelFunction, nodeids)
p.close()
...
Vấn đề là khi tôi tải đồ thị vào Python, nó mất rất nhiều bộ nhớ (khoảng 2G, nó là một đồ thị lớn với hàng nghìn nút thực sự), nhưng khi nó bắt đầu đi vào phần song song của mã thực hiện chức năng bản đồ) có vẻ như mọi quá trình đều được cung cấp một bản sao riêng biệt của g và tôi chỉ cần hết bộ nhớ trên máy của mình (nó có RAM 6G và trao đổi 3G), vì vậy tôi muốn thấy đó là cách để cung cấp cho mỗi quá trình cùng một bản sao của g sao cho chỉ có bộ nhớ để giữ một bản sao của nó sẽ được yêu cầu? bất kỳ đề xuất được đánh giá cao và cảm ơn trước.
Tôi không biết đủ về điều này để cung cấp cho bạn câu trả lời chắc chắn, tuy nhiên một đề xuất sẽ là chia đồ thị thành phần nhỏ hơn và sau đó sử dụng quy trình để "chia và chinh phục" về cơ bản. – KronoS
Bạn có thể đặt biểu đồ vào 'multiprocessing.Manager' tùy chỉnh, cho phép tất cả các quy trình sử dụng một biểu đồ được chia sẻ được lưu trữ trong quy trình' Trình quản lý'. Tuy nhiên, điều đó đi kèm với một hình phạt hiệu suất lớn khi bạn truy cập vào biểu đồ được chia sẻ, vì vậy nó có thể sẽ không cải thiện hiệu suất so với cách tiếp cận tuần tự. – dano
Bạn có đang chạy ứng dụng này trên Windows không? Nếu bạn đang chạy nó trên Linux CoW lý tưởng nên kick vào và ngăn chặn nhiều bản sao của 'nodeIDs' được tạo ra. Xem [chú thích] này (http://rhodesmill.org/brandon/2010/python-multiprocessing-linux-windows/#comment-160800553) và bài viết liên quan – iruvar