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!