Home Backend Development Python Tutorial Different behaviors of Synchronized variables in different operating systems

Different behaviors of Synchronized variables in different operating systems

Nov 10, 2024 am 03:13 AM

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

SEO:

  • Python Synchronized variable value doesn't change in global context
  • Synchronized value not modified in main process
  • Synchronized value not shared between processes

In Python's multiprocessing library, there is multiprocessing.sharedctypes.synchronized, a wrapper type used to share data between different processes. By default, a reentrant lock RLock is used to maintain data consistency. Before relearning Python this time, I was using Python 3.6. Although I had used some superficial knowledge of the mp library at that time, I had not considered in depth the different behaviors of multi-process programs on different operating systems and their possible impact.

While studying this time, I encountered a problem: when I create a multiprocessing.sharedctypes.Value variable in the global context using Python 3.12 on the macOS system, if I access this variable in a new process, its value Synchronization is not maintained between different processes. After discussing with teacher Eric Greene, I discovered that since Python 3.8, the way to create new processes in different operating systems has changed:

  • Linux systems always use fork to create new processes. During fork, all resources of the parent process are inherited by the child process, so the synchronization variables defined globally in the parent process can also be accessed by the child process, so data consistency is retained
  • Windows systems always use spawn, which is a method of creating a new Python interpreter process to implement multi-processing. It is equivalent to "opening more" Python, so there is more overhead and lower efficiency, but this is a limitation of the Windows system itself. In this case, the child process only inherits the resources required by the run() method of the parent process to start the new process.
  • The macOS system used fork before Python 3.8, and then changed to spawn, so some multi-process behaviors have changed. (macOS can still be set to use fork, but Python is not officially recommended)

In my example, because the Synchronized variable is declared globally in the parent process, it will not be inherited by the child process on Windows and macOS systems, so the values ​​​​are different between different processes; on Linux systems , all resources of the parent process are inherited, so the child process can change its value.

This caused the phenomenon I saw: the global synchronization variables of my code on macOS did not change; while other people's Linux systems ran normally and the variables were synchronized among all processes.

Reference reading:

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

The above is the detailed content of Different behaviors of Synchronized variables in different operating systems. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to solve the permissions problem encountered when viewing Python version in Linux terminal? How to solve the permissions problem encountered when viewing Python version in Linux terminal? Apr 01, 2025 pm 05:09 PM

Solution to permission issues when viewing Python version in Linux terminal When you try to view Python version in Linux terminal, enter python...

How to avoid being detected by the browser when using Fiddler Everywhere for man-in-the-middle reading? How to avoid being detected by the browser when using Fiddler Everywhere for man-in-the-middle reading? Apr 02, 2025 am 07:15 AM

How to avoid being detected when using FiddlerEverywhere for man-in-the-middle readings When you use FiddlerEverywhere...

How to efficiently copy the entire column of one DataFrame into another DataFrame with different structures in Python? How to efficiently copy the entire column of one DataFrame into another DataFrame with different structures in Python? Apr 01, 2025 pm 11:15 PM

When using Python's pandas library, how to copy whole columns between two DataFrames with different structures is a common problem. Suppose we have two Dats...

How to teach computer novice programming basics in project and problem-driven methods within 10 hours? How to teach computer novice programming basics in project and problem-driven methods within 10 hours? Apr 02, 2025 am 07:18 AM

How to teach computer novice programming basics within 10 hours? If you only have 10 hours to teach computer novice some programming knowledge, what would you choose to teach...

How does Uvicorn continuously listen for HTTP requests without serving_forever()? How does Uvicorn continuously listen for HTTP requests without serving_forever()? Apr 01, 2025 pm 10:51 PM

How does Uvicorn continuously listen for HTTP requests? Uvicorn is a lightweight web server based on ASGI. One of its core functions is to listen for HTTP requests and proceed...

How to solve permission issues when using python --version command in Linux terminal? How to solve permission issues when using python --version command in Linux terminal? Apr 02, 2025 am 06:36 AM

Using python in Linux terminal...

How to get news data bypassing Investing.com's anti-crawler mechanism? How to get news data bypassing Investing.com's anti-crawler mechanism? Apr 02, 2025 am 07:03 AM

Understanding the anti-crawling strategy of Investing.com Many people often try to crawl news data from Investing.com (https://cn.investing.com/news/latest-news)...

See all articles