Maison >développement back-end >Tutoriel Python >Comment partager des verrous entre les processus dans les applications multitraitements Python

Comment partager des verrous entre les processus dans les applications multitraitements Python

Barbara Streisand
Barbara Streisandoriginal
2024-10-17 10:52:02771parcourir

How to Share Locks Between Processes in Python Multiprocessing Applications

Partage de verrous entre processus avec Python

Dans les applications multithread, les verrous sont cruciaux pour synchroniser l'accès aux ressources partagées. Cependant, lorsque ces processus sont répartis sur plusieurs processus enfants, le partage de verrous entre eux peut être un défi.

Problème :

Considérons une fonction qui utilise un multiprocessing.Lock () objet (l) pour gérer l’accès aux ressources critiques. Après avoir créé un pool de processus de travail (pool) et une fonction partielle (func) qui transmet le verrou en argument, une tentative d'utilisation de pool.map() pour répartir la tâche sur plusieurs processus entraîne une erreur d'exécution : "Verrouiller les objets ne doit être partagé qu'entre les processus par héritage. pour la communication inter-processus.

Solution :

Pour surmonter cette limitation et partager avec succès le verrou entre les processus, deux approches viables existent :

Utilisation d'un objet Manager :

  1. Créez une instance multiprocessing.Manager() (m) et transmettez un Manager.Lock(), qui permet un partage sécurisé des données entre les processus.

    Cette méthode introduit une surcharge supplémentaire en raison de la nécessité d'un processus de gestionnaire externe et d'IPC.

    • Passer le verrou lors de la création du pool :
  2. Passez le multiprocessing.Lock() (l) régulier à l'initialisation du pool à l'aide de l'initialiseur kwarg.

    Cela rend l'instance de verrouillage globalement accessible dans tous les processus enfants, éliminant le besoin d'une fonction partielle.

    • Exemple de code (en utilisant la deuxième solution) :
En suivant ces méthodes , vous pouvez partager efficacement les verrous entre les processus, permettant ainsi la synchronisation et le partage de données dans les applications Python distribuées.

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