Rumah pembangunan bahagian belakang Tutorial Python Tingkah laku berbeza pembolehubah disegerakkan dalam sistem pengendalian yang berbeza

Tingkah laku berbeza pembolehubah disegerakkan dalam sistem pengendalian yang berbeza

Nov 10, 2024 am 03:13 AM

Synchronized 变量在不同操作系统的不同行为

SEO:

  • Nilai pembolehubah yang disegerakkan Python tidak berubah dalam konteks global
  • Nilai disegerakkan tidak diubah suai dalam proses utama
  • Nilai disegerakkan tidak dikongsi antara proses

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:

  • Sistem Linux sentiasa menggunakan garpu untuk mencipta proses baharu. Semasa fork, semua sumber proses induk diwarisi oleh proses anak, jadi pembolehubah penyegerakan yang ditakrifkan secara global dalam proses induk juga boleh diakses oleh proses anak, jadi ketekalan data dikekalkan
  • Sistem Windows sentiasa menggunakan spawn, iaitu kaedah mencipta proses penterjemah Python baharu untuk melaksanakan pelbagai pemprosesan. Ia bersamaan dengan Python "membuka lebih banyak", jadi terdapat lebih banyak overhed dan kecekapan yang lebih rendah, tetapi ini adalah had sistem Windows itu sendiri. Dalam kes ini, proses anak hanya mewarisi sumber yang diperlukan oleh kaedah run() proses induk untuk memulakan proses baharu.
  • Sistem macOS menggunakan fork sebelum Python 3.8, dan kemudian bertukar kepada spawn, jadi beberapa gelagat berbilang proses telah berubah. (macOS masih boleh ditetapkan untuk menggunakan garpu, tetapi Python tidak disyorkan secara rasmi)

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:

  • https://docs.python.org/3/library/multiprocessing.html#contexts-and-start-methods
  • https://docs.python.org/3/library/multiprocessing.html#multiprocessing.sharedctypes.synchronized

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!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara Menggunakan Python untuk Mencari Pengagihan Zipf Fail Teks Cara Menggunakan Python untuk Mencari Pengagihan Zipf Fail Teks Mar 05, 2025 am 09:58 AM

Cara Menggunakan Python untuk Mencari Pengagihan Zipf Fail Teks

Cara memuat turun fail di python Cara memuat turun fail di python Mar 01, 2025 am 10:03 AM

Cara memuat turun fail di python

Penapisan gambar di python Penapisan gambar di python Mar 03, 2025 am 09:44 AM

Penapisan gambar di python

Bagaimana saya menggunakan sup yang indah untuk menghuraikan html? Bagaimana saya menggunakan sup yang indah untuk menghuraikan html? Mar 10, 2025 pm 06:54 PM

Bagaimana saya menggunakan sup yang indah untuk menghuraikan html?

Cara Bekerja Dengan Dokumen PDF Menggunakan Python Cara Bekerja Dengan Dokumen PDF Menggunakan Python Mar 02, 2025 am 09:54 AM

Cara Bekerja Dengan Dokumen PDF Menggunakan Python

Cara Cache Menggunakan Redis dalam Aplikasi Django Cara Cache Menggunakan Redis dalam Aplikasi Django Mar 02, 2025 am 10:10 AM

Cara Cache Menggunakan Redis dalam Aplikasi Django

Memperkenalkan Toolkit Bahasa Alam (NLTK) Memperkenalkan Toolkit Bahasa Alam (NLTK) Mar 01, 2025 am 10:05 AM

Memperkenalkan Toolkit Bahasa Alam (NLTK)

Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch? Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch? Mar 10, 2025 pm 06:52 PM

Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch?

See all articles