Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Berkongsi dan Mengubah Suai Kamus Antara Pelbagai Proses dalam Python?

Bagaimana untuk Berkongsi dan Mengubah Suai Kamus Antara Pelbagai Proses dalam Python?

Susan Sarandon
Susan Sarandonasal
2024-11-14 17:44:02797semak imbas

How to Share and Modify a Dictionary Between Multiple Processes in Python?

Pemprosesan Berbilang: Perkongsian Kamus Antara Proses

Pertimbangkan senario di mana berbilang proses beroperasi pada baris gilir kongsi, Q dan memanipulasi kamus global , D. Yang menghairankan, mengakses D selepas menyertai Q mendedahkan kamus kosong, walaupun terdapat pengubahsuaian yang diperhatikan pada kanak-kanak proses.

Tingkah laku ini berpunca daripada isu penyegerakan. Setiap proses beroperasi pada ruang ingatannya sendiri, dan perubahan yang dibuat kepada D dalam proses kanak-kanak tidak ditunjukkan secara automatik dalam proses utama. Untuk menangani perkara ini, langkah penyegerakan adalah perlu.

Penyelesaian: Menggunakan Objek Pengurus

Pustaka standard Python menyediakan penyelesaian menggunakan objek Pengurus. Objek ini menawarkan akses disegerakkan kepada data yang dikongsi antara proses:

from multiprocessing import Process, Manager

def f(d):
    d[1] += '1'
    d['2'] += 2

if __name__ == '__main__':
    manager = Manager()

    d = manager.dict()
    d[1] = '1'
    d['2'] = 2

    p1 = Process(target=f, args=(d,))
    p2 = Process(target=f, args=(d,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

    print(d)

Dalam contoh ini, kaedah dict() objek Pengurus mencipta kamus kongsi, d, yang boleh diakses oleh semua proses. Perubahan yang dibuat kepada d dalam proses anak disebarkan kepada proses utama melalui memori kongsi yang diuruskan oleh objek Pengurus.

Output:

$ python mul.py
{1: '111', '2': 6}

Atas ialah kandungan terperinci Bagaimana untuk Berkongsi dan Mengubah Suai Kamus Antara Pelbagai Proses dalam Python?. 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