Maison  >  Article  >  développement back-end  >  Comment partager des données entre les processus dans Python Multiprocessing ?

Comment partager des données entre les processus dans Python Multiprocessing ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-06 16:23:02985parcourir

How to Share Data Between Processes in Python Multiprocessing?

Mises à jour des variables globales non renvoyées au parent en multitraitement

En multitraitement, une nouvelle instance Python est créée pour chaque processus, ce qui entraîne un résultat global distinct États. Par conséquent, les mises à jour des variables globales effectuées par les processus enfants restent invisibles pour le processus parent.

Objets non sélectionnables

Le multitraitement repose sur la sérialisation via pickle. Si les objets que vous souhaitez échanger ne peuvent pas être récupérés, ils ne peuvent pas être partagés entre les processus. Cela inclut toutes les données stockées dans les objets Manager ou transmises via des files d'attente.

Approches alternatives

  • Gestion d'état personnalisée : Envisagez d'utiliser une solution en dehors du module multitraitement, comme la mémoire partagée ou une base de données, pour gérer l'état à l'échelle du processus.
  • Sous-classement et décapage : Si l'objet non picklable est une classe Python, étudiez la possibilité de en le sous-classant et en implémentant les méthodes getstate et setstate pour activer le décapage.
  • Échange de données via des files d'attente : Au lieu de transmettre directement des objets non picklables, envisagez de transférer les données requises sous forme de chaînes ou d'autres formats sérialisables via des files d'attente. Cela permet aux processus enfants de manipuler les données sans nécessiter la sérialisation des objets.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn