SEO:
Dalam pustaka multiprocessing Python, terdapat multiprocessing.sharedctypes.synchronized, jenis pembungkus yang digunakan untuk berkongsi data antara proses yang berbeza Secara lalai, kunci masuk semula RLock digunakan untuk mengekalkan konsistensi data. Sebelum mempelajari semula Python kali ini, saya menggunakan Python 3.6 Walaupun saya telah menggunakan beberapa pengetahuan cetek tentang perpustakaan mp pada masa itu, saya tidak mempertimbangkan secara mendalam kelakuan berbeza program berbilang proses pada sistem pengendalian yang berbeza dan kemungkinan kesannya.
Semasa belajar kali ini, saya menghadapi masalah: apabila saya mencipta pembolehubah multiprocessing.sharedctypes.Value dalam konteks global menggunakan Python 3.12 pada sistem macOS, jika saya mengakses pembolehubah ini dalam proses baharu, nilainya Penyegerakan tidak dikekalkan antara proses yang berbeza. Selepas berbincang dengan cikgu Eric Greene, saya mendapati bahawa sejak Python 3.8, cara untuk mencipta proses baharu dalam sistem pengendalian yang berbeza telah berubah:
Dalam contoh saya, kerana pembolehubah Disegerakkan diisytiharkan secara global dalam proses induk, ia tidak akan diwarisi oleh proses anak pada sistem Windows dan macOS, jadi nilainya berbeza antara proses yang berbeza pada sistem Linux , semua sumber proses induk diwarisi, jadi proses anak boleh mengubah nilainya.
Ini menyebabkan fenomena yang saya lihat: pembolehubah penyegerakan global kod saya pada macOS tidak berubah manakala sistem Linux orang lain berjalan secara normal dan pembolehubah disegerakkan antara semua proses.
Bacaan rujukan:
Atas ialah kandungan terperinci Tingkah laku berbeza pembolehubah disegerakkan dalam sistem pengendalian yang berbeza. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!