Bolehkah Multiprocessing Berkongsi Data Dikongsi Baca Sahaja Tanpa Replikasi?

Barbara Streisand
Lepaskan: 2024-10-25 02:46:30
asal
244 orang telah melayarinya

Can Multiprocessing Share Read-Only Shared Data Without Replication?

Adakah Multiprocessing Meniru Data Dikongsi Baca Sahaja?

Pengenalan

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.

Soalan

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>
Salin selepas log masuk

Bolehkah kami menjamin atau menggalakkan proses yang berbeza berkongsi glbl_array tanpa membuat salinan individu?

Jawapan

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>
Salin selepas log masuk

Butiran Pelaksanaan

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan