Maison > développement back-end > Tutoriel Python > Comment garantir un accès partagé aux données en lecture seule en multitraitement ?

Comment garantir un accès partagé aux données en lecture seule en multitraitement ?

DDD
Libérer: 2024-10-25 03:02:02
original
756 Les gens l'ont consulté

How to Ensure Shared Access to Read-Only Data in Multiprocessing?

Multitraitement : garantir un accès partagé aux données en lecture seule

Dans les scénarios multitraitements, la question du partage de données entre processus se pose souvent. Plus précisément, lorsqu'il s'agit de grandes structures de données en lecture seule, il est souhaitable d'éviter de copier ces données dans chaque processus, ce qui peut prendre du temps et consommer beaucoup de mémoire.

Considérez l'extrait de code suivant :

<code class="python">glbl_array = # a 3 Gb array

def my_func( args, def_param = glbl_array):
    #do stuff on args and def_param

if __name__ == '__main__':
  pool = Pool(processes=4)
  pool.map(my_func, range(1000))</code>
Copier après la connexion

Dans cet exemple, une variable globale glbl_array est définie comme un grand tableau (3 Go). La fonction my_func est conçue pour fonctionner sur glbl_array. Lorsque plusieurs processus sont générés pour une exécution parallèle à l'aide de Pool(processes=4), la question se pose : chaque processus recevra-t-il une copie distincte des données dans glbl_array, ou tous les processus partageront-ils les mêmes données en lecture seule ?

Sous Linux, la sémantique de l'appel système fork, qui sous-tend le multitraitement, permet la sémantique de copie sur écriture. Cela signifie que si glbl_array est en lecture seule, les données ne seront pas physiquement copiées entre les processus sauf si cela est nécessaire.

Cependant, si glbl_array est modifié, les modifications apportées par un processus seront reflétées dans les données accessibles à tous les autres. processus. Pour éviter les écrasements de données indésirables, envisagez d'utiliser des objets immuables, tels que la représentation tostring() de glbl_array, comme paramètre par défaut de la fonction.

Vous pouvez également exploiter les fonctionnalités de mémoire partagée fournies par le module multitraitement Python. pour créer et gérer explicitement des segments de mémoire partagée, garantissant ainsi que les données ne sont pas dupliquées entre les processus.

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
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal