Apakah proses anak muncul melalui objek berbagi multiprosesing yang dibuat sebelumnya dalam program?
Saya memiliki pengaturan berikut:
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'))
Saya memuat beberapa objek besar ke dalam memori, lalu membuat kumpulan pekerja yang perlu menggunakan objek besar itu. Objek besar diakses hanya-baca, saya tidak perlu meneruskan modifikasinya di antara proses.
Pertanyaan saya adalah: apakah objek besar dimuat ke dalam memori bersama, seperti jika saya menelurkan proses di unix / c, atau apakah setiap proses memuat salinan objek besar itu sendiri?
Pembaruan: untuk memperjelas lebih lanjut - big_lookup_object adalah objek pencarian bersama. Saya tidak perlu membaginya dan memprosesnya secara terpisah. Saya perlu menyimpan satu salinannya. Pekerjaan yang perlu saya bagi adalah membaca banyak file besar lainnya dan mencari item dalam file besar tersebut terhadap objek pencarian.
Pembaruan lebih lanjut: database adalah solusi yang bagus, memcache mungkin solusi yang lebih baik, dan file di disk (rak atau dbm) mungkin lebih baik. Dalam pertanyaan ini saya sangat tertarik pada solusi memori. Untuk solusi terakhir, saya akan menggunakan hadoop, tetapi saya ingin melihat apakah saya dapat memiliki versi dalam memori lokal juga.
marshal.load
orang tua dan untuk setiap anak (setiap proses mengimpor modul).