Bagaimana untuk Berkongsi Baris Dengan Selamat Antara Proses Pekerja dalam Modul Berbilang Pemprosesan Python?

DDD
Lepaskan: 2024-10-19 18:47:02
asal
785 orang telah melayarinya

How to Share a Queue Safely Between Worker Processes in Python's Multiprocessing Module?

Berkongsi Baris Antara Proses Berbilang Pekerja

Modul berbilang pemprosesan menyediakan mekanisme untuk mencipta dan mengurus berbilang proses untuk melaksanakan tugas secara serentak. Satu kes penggunaan biasa ialah meminta proses pekerja melaporkan hasil mereka kembali kepada proses pusat. Di sinilah barisan dimainkan. Walau bagaimanapun, apabila menggunakan apply_async untuk menghasilkan proses pekerja, berkongsi baris gilir di antara mereka boleh menjadi mencabar.

Ralat: Objek Baris Gilir untuk Warisan Sahaja

Apabila cuba lulus baris gilir terus ke apply_async, anda mungkin menghadapi RuntimeError: "Objek baris gilir hanya boleh dikongsi antara proses melalui warisan." Ralat ini menandakan bahawa contoh baris gilir hanya boleh dikongsi antara proses yang berkaitan secara langsung dengan warisan. Dalam kod yang disediakan, proses pekerja tidak diwarisi daripada proses utama, oleh itu ralat.

Penyelesaian: Menggunakan multiprocessing.Manager

Untuk mengatasi sekatan warisan ini, multiprocessing menyediakan kelas Pengurus. Pengurus menyediakan cara untuk mencipta objek yang boleh dikongsi merentasi pelbagai proses, termasuk baris gilir. Dengan menggunakan Pengurus, kami boleh membuat baris gilir yang boleh diakses oleh semua proses pekerja tanpa memerlukan pewarisan.

Kod Refactored:

Kod berikut menunjukkan cara berkongsi baris gilir dalam kalangan proses pekerja menggunakan multipemprosesan.Pengurus:

import multiprocessing
def worker(name, que):
    que.put("%d is done" % name)

if __name__ == '__main__':
    pool = multiprocessing.Pool(processes=3)
    m = multiprocessing.Manager()
    q = m.Queue()
    workers = pool.apply_async(worker, (33, q))
Salin selepas log masuk

Dalam kod ini, Manager() mencipta contoh pengurus, m, yang kemudiannya digunakan untuk membuat instantiate baris gilir kongsi, q. Baris gilir diluluskan sebagai hujah kepada kaedah apply_async, membenarkan pekerja memproses untuk mengakses dan menulis hasil padanya. Pendekatan ini membolehkan komunikasi antara proses pekerja dan proses utama melalui baris gilir yang dikongsi, menghapuskan potensi ralat pewarisan.

Atas ialah kandungan terperinci Bagaimana untuk Berkongsi Baris Dengan Selamat Antara Proses Pekerja dalam Modul Berbilang Pemprosesan 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
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!