Các quy trình con có được tạo ra thông qua các đối tượng chia sẻ đa xử lý được tạo trước đó trong chương trình không?
Tôi có thiết lập sau:
do_some_processing(filename):
for line in file(filename):
if line.split(',')[0] in big_lookup_object:
# something here
if __name__ == '__main__':
big_lookup_object = marshal.load('file.bin')
pool = Pool(processes=4)
print pool.map(do_some_processing, glob.glob('*.data'))
Tôi đang tải một số đối tượng lớn vào bộ nhớ, sau đó tạo một nhóm công nhân cần sử dụng đối tượng lớn đó. Đối tượng lớn được truy cập ở chế độ chỉ đọc, tôi không cần chuyển các sửa đổi của nó giữa các quá trình.
Câu hỏi của tôi là: đối tượng lớn có được tải vào bộ nhớ dùng chung không, như nó sẽ xảy ra nếu tôi tạo một quy trình trong unix / c, hay mỗi quy trình tải bản sao của đối tượng lớn?
Cập nhật: để làm rõ thêm - big_lookup_object là một đối tượng tra cứu được chia sẻ. Tôi không cần phải chia nhỏ ra và xử lý riêng. Tôi cần giữ một bản sao của nó. Công việc mà tôi cần chia nó là đọc nhiều tệp lớn khác và tra cứu các mục trong tệp lớn đó dựa trên đối tượng tra cứu.
Cập nhật thêm: cơ sở dữ liệu là một giải pháp tốt, memcached có thể là giải pháp tốt hơn và tệp trên đĩa (kệ hoặc dbm) có thể còn tốt hơn. Trong câu hỏi này, tôi đặc biệt quan tâm đến một giải pháp trong bộ nhớ. Đối với giải pháp cuối cùng, tôi sẽ sử dụng hadoop, nhưng tôi muốn xem liệu tôi cũng có thể có phiên bản trong bộ nhớ cục bộ hay không.
marshal.load
cho cha mẹ và cho mỗi con (mỗi tiến trình nhập mô-đun).