Comment synchroniser l'accès aux données partagées entre les processus en Python ?

Barbara Streisand
Libérer: 2024-11-27 15:06:15
original
645 Les gens l'ont consulté

How to Synchronize Access to Shared Data Across Processes in Python?

Synchronisation de l'accès aux données partagées entre les processus : une solution multitraitement

Dans un scénario où plusieurs processus manipulent simultanément un dictionnaire global, la synchronisation devient cruciale pour garantir des résultats cohérents. Ce problème a été rencontré dans un programme qui implique plusieurs processus collaborant sur une file d'attente lors de l'accès et de la modification d'un dictionnaire partagé, D.

La divergence survient lors de l'inspection du dictionnaire dans un processus enfant, où les modifications sont visibles. Cependant, lorsque vous rejoignez la file d'attente du processus principal, le dictionnaire devient vide, indiquant un problème de synchronisation/verrouillage.

Comprendre le problème

Le défi de synchronisation vient du fait que différents processus opèrent simultanément sur le même dictionnaire. Sans une synchronisation appropriée, les modifications apportées par chaque processus peuvent ne pas être reflétées de manière cohérente dans tous les processus, ce qui entraîne des données corrompues ou incohérentes.

Solution : Utilisation d'un objet Manager

A Une solution robuste implique l'emploi d'un objet Manager de la bibliothèque multitraitement. Cet objet fournit un mécanisme permettant de créer et de gérer des structures de données partagées qui peuvent être consultées et modifiées par plusieurs processus simultanément.

L'extrait de code montre comment mettre en œuvre cette approche efficacement :

from multiprocessing import Process, Manager

def f(d):
    d[1] += '1'
    d['2'] += 2

if __name__ == '__main__':
    manager = Manager()

    d = manager.dict()
    d[1] = '1'
    d['2'] = 2

    p1 = Process(target=f, args=(d,))
    p2 = Process(target=f, args=(d,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

    print(d)
Copier après la connexion

Dans Dans cet exemple, la méthode manager.dict() crée un dictionnaire partagé accessible et modifié par plusieurs processus. Les processus modifient simultanément le dictionnaire, qui est ensuite imprimé, révélant les valeurs mises à jour.

Cette approche synchronise efficacement l'accès au dictionnaire partagé, garantissant que tous les processus ont une vue cohérente des modifications des donné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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal