Dalam senario berbilang pemprosesan, adalah penting untuk mengoptimumkan penggunaan sumber dengan memastikan data yang dikongsi adalah tidak diduplikasi merentas pelbagai proses. Memahami cara data baca sahaja dikendalikan dalam situasi ini boleh menjimatkan memori dan overhed prestasi yang ketara.
Pertimbangkan kod Python berikut:
<code class="python">glbl_array = # a 3 Gb array def my_func(args, def_param=glbl_array): # do stuff on args and def_param if __name__ == '__main__': pool = Pool(processes=4) pool.map(my_func, range(1000))</code>
Bolehkah kami menjamin atau menggalakkan proses yang berbeza berkongsi glbl_array tanpa membuat salinan individu?
Untuk memastikan akses dikongsi tanpa pertindihan, kami boleh menggunakan mekanisme memori kongsi yang disediakan oleh modul pemproses berbilang dalam Python. Begini cara ia boleh dilaksanakan:
<code class="python">import multiprocessing import ctypes import numpy as np shared_array_base = multiprocessing.Array(ctypes.c_double, 10 * 10) shared_array = np.ctypeslib.as_array(shared_array_base.get_obj()) shared_array = shared_array.reshape(10, 10) # Parallel processing def my_func(i, def_param=shared_array): shared_array[i, :] = i if __name__ == '__main__': pool = multiprocessing.Pool(processes=4) pool.map(my_func, range(10)) print(shared_array)</code>
Kod mencipta tatasusunan memori kongsi (shared_array_base) menggunakan kelas multiprocessing.Array. Ia kemudian menukarnya kepada tatasusunan Numpy (shared_array) untuk manipulasi yang mudah.
Fungsi utama (my_func) mengambil shared_array sebagai parameter lalai untuk mengelakkan penyalinan yang tidak perlu dan semantik salin atas tulis Linux memastikan pertindihan data hanya berlaku apabila pengubahsuaian dibuat pada kawasan kongsi.
Dengan menjalankan kod, anda akan melihat bahawa shared_array yang dikongsi dicetak tanpa sebarang pertindihan, menunjukkan bahawa proses berkongsi objek memori yang sama.
Atas ialah kandungan terperinci Bolehkah Multiprocessing Berkongsi Data Dikongsi Baca Sahaja Tanpa Replikasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!