Cara Berkongsi Kunci Antara Proses dalam Aplikasi Pemprosesan Berbilang Python

Barbara Streisand
Lepaskan: 2024-10-17 10:52:02
asal
636 orang telah melayarinya

How to Share Locks Between Processes in Python Multiprocessing Applications

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:

  1. Menggunakan Objek Pengurus:

    • Buat contoh multiprocessing.Manager() (m) dan lulus Manager.Lock(), yang membenarkan perkongsian data selamat antara proses.
    • Kaedah ini memperkenalkan overhed tambahan kerana keperluan untuk proses pengurus luaran dan IPC.
  2. Melalui Kunci pada Penciptaan Pool :

    • Luluskan berbilang pemprosesan biasa.Kunci() (l) pada permulaan kumpulan menggunakan kwarg pemula.
    • Ini menjadikan contoh kunci boleh diakses secara global dalam semua proses kanak-kanak, menghapuskan keperluan untuk fungsi separa.

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

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!