Mises à jour des variables globales multitraitements non renvoyées au parent
Lors de l'utilisation du multitraitement pour établir un processus secondaire, une instance Python distincte est créée avec son propre état mondial. Cet état global est isolé, rendant toute modification apportée aux variables globales par les processus enfants invisible au processus parent.
De plus, la majorité des abstractions multitraitements exploitent pickle pour transférer des données. Toutes les données transmises via des proxys doivent être pickleable, y compris tous les objets fournis par un Manager. La section Gestionnaire souligne que d'autres processus peuvent accéder aux objets partagés à l'aide de proxys.
Des restrictions similaires s'appliquent aux files d'attente, bien que la documentation omette cette information. Un test rapide confirme que toutes les données des files d'attente doivent également pouvoir être décapées.
Si le décapage de vos données reste impossible, envisagez de les stocker en tant qu'objet ctype et de transmettre une référence mémoire à un processus enfant. Cette approche est quelque peu risquée et doit être réservée aux situations où les autres options sont épuisées.
Dans votre cas, comprendre les complexités du LORR est crucial. S'il s'agit d'une classe Python, la sous-classer et définir les méthodes setstate et getstate peut faciliter le décapage.
Alternativement, extraire les données requises d'une instance LORR et les transmettre via une simple chaîne peut suffire. Envisagez d'utiliser des files d'attente pour envoyer des messages entre le processus principal et les processus enfants afin d'invoquer directement les méthodes objet, comme illustré dans le schéma ci-dessus.
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!