Référencement :
Dans la bibliothèque multitraitement de Python, il existe multiprocessing.sharedctypes.synchronized, un type de wrapper utilisé pour partager des données entre différents processus. Par défaut, un verrou réentrant RLock est utilisé pour maintenir la cohérence des données. Avant de réapprendre Python cette fois, j'utilisais Python 3.6. Même si j'avais à l'époque utilisé une connaissance superficielle de la bibliothèque mp, je n'avais pas réfléchi en profondeur aux différents comportements des programmes multi-processus sur différents systèmes d'exploitation et à leur impact possible.
En étudiant cette fois, j'ai rencontré un problème : lorsque je crée une variable multiprocessing.sharedctypes.Value dans le contexte global en utilisant Python 3.12 sur le système macOS, si j'accède à cette variable dans un nouveau processus, sa valeur de synchronisation n'est pas maintenu entre les différents processus. Après avoir discuté avec le professeur Eric Greene, j'ai découvert que depuis Python 3.8, la manière de créer de nouveaux processus dans différents systèmes d'exploitation a changé :
Dans mon exemple, comme la variable Synchronisée est déclarée globalement dans le processus parent, elle ne sera pas héritée par le processus enfant sur les systèmes Windows et macOS, donc les valeurssont différentes entre les différents processus sur les systèmes Linux ; , toutes les ressources du processus parent sont héritées, le processus enfant peut donc modifier sa valeur.
Cela a provoqué le phénomène que j'ai observé : les variables de synchronisation globales de mon code sur macOS n'ont pas changé ; alors que les systèmes Linux d'autres personnes fonctionnaient normalement et les variables étaient synchronisées entre tous les processus.
Lecture de référence :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!