Berkongsi Kunci Merentas Proses dengan Python
Dalam aplikasi berbilang benang, kunci adalah penting untuk menyegerakkan akses kepada sumber yang dikongsi. Walau bagaimanapun, apabila proses ini diedarkan merentasi berbilang proses kanak-kanak, berkongsi kunci antara mereka boleh menjadi satu cabaran.
Masalah:
Pertimbangkan fungsi yang menggunakan berbilang pemprosesan.Kunci () objek (l) untuk mengurus akses kepada sumber kritikal. Selepas mencipta kumpulan proses pekerja (pool) dan fungsi separa (func) yang melepasi kunci sebagai hujah, percubaan untuk menggunakan pool.map() untuk mengagihkan tugas merentas berbilang proses menghasilkan ralat masa jalan: "Kunci objek hanya boleh dikongsi antara proses melalui warisan."
Elemen Hilang:
Ralat timbul kerana, secara lalai, Python tidak boleh mengambil contoh berbilang pemprosesan biasa.Lock() dengan selamat untuk komunikasi antara proses.
Penyelesaian:
Untuk mengatasi had ini dan berjaya berkongsi kunci merentas proses, dua pendekatan berdaya maju wujud:
Menggunakan Objek Pengurus:
Melalui Kunci pada Penciptaan Pool :
Contoh Kod (Menggunakan Penyelesaian Kedua):
<code class="python">from multiprocessing import Pool, Lock def init(l): global lock lock = l def target(iterable_item): # Access shared resources using lock def main(): l = Lock() pool = Pool(initializer=init, initargs=(l,)) pool.map(target, iterable) pool.close() pool.join()</code>
Dengan mengikuti kaedah ini , anda boleh berkongsi kunci antara proses dengan berkesan, membolehkan penyegerakan dan perkongsian data dalam aplikasi Python yang diedarkan.
Atas ialah kandungan terperinci Cara Berkongsi Kunci Antara Proses dalam Aplikasi Pemprosesan Berbilang Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!