Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Memastikan Akses Dikongsi kepada Data Baca Sahaja dalam Multiprocessing?

Bagaimana untuk Memastikan Akses Dikongsi kepada Data Baca Sahaja dalam Multiprocessing?

DDD
DDDasal
2024-10-25 03:02:02687semak imbas

How to Ensure Shared Access to Read-Only Data in Multiprocessing?

Pemprosesan Berbilang: Memastikan Akses Dikongsi kepada Data Baca Sahaja

Dalam senario berbilang pemprosesan, persoalan perkongsian data antara proses sering timbul. Khususnya, apabila berurusan dengan struktur data baca sahaja yang besar, adalah wajar untuk mengelak daripada menyalin data ini ke setiap proses, yang boleh memakan masa dan memori intensif.

Pertimbangkan coretan kod 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>

Dalam contoh ini, glbl_array pembolehubah global ditakrifkan sebagai tatasusunan besar (3 Gb). Fungsi my_func direka bentuk untuk beroperasi pada glbl_array. Apabila berbilang proses dihasilkan untuk pelaksanaan selari menggunakan Pool(processes=4), persoalan timbul: adakah setiap proses akan menerima salinan data yang berasingan dalam glbl_array, atau adakah semua proses akan berkongsi data baca sahaja yang sama?

Di Linux, semantik panggilan sistem fork, yang menyokong pemproses berbilang, membolehkan semantik salin atas tulis. Ini bermakna jika glbl_array adalah baca sahaja, data tidak akan disalin secara fizikal antara proses melainkan perlu.

Walau bagaimanapun, jika glbl_array diubah suai, perubahan yang dibuat oleh satu proses akan ditunjukkan dalam data yang boleh diakses oleh semua yang lain proses. Untuk mengelakkan tiruan data yang tidak diingini, pertimbangkan untuk menggunakan objek tidak boleh diubah, seperti perwakilan tostring() glbl_array, sebagai parameter lalai untuk fungsi tersebut.

Sebagai alternatif, seseorang boleh memanfaatkan kemudahan memori kongsi yang disediakan oleh modul pemproses berbilang Python untuk mencipta dan mengurus segmen memori kongsi secara eksplisit, dengan itu memastikan data tidak diduplikasi merentas proses.

Atas ialah kandungan terperinci Bagaimana untuk Memastikan Akses Dikongsi kepada Data Baca Sahaja dalam Multiprocessing?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn