Les données partagées en lecture seule doivent-elles être copiées dans des environnements multitraitements ?

DDD
Libérer: 2024-10-25 06:12:29
original
1081 Les gens l'ont consulté

Should Readonly Shared Data be Copied in Multiprocessing Environments?

Multitraitement des données partagées en lecture seule

Résumé du problème

Lors de l'utilisation du multitraitement, la question se pose de savoir si les données partagées en lecture seule sont copiées dans différents processus. Si oui, comment empêcher ou encourager cette copie ?

Solution : Mémoire partagée

L'extrait de code fourni, qui utilise un tableau global comme paramètre par défaut dans une fonction exécutée par plusieurs processus, soulève des inquiétudes concernant la duplication de la mémoire. Pour empêcher des processus individuels d'obtenir une copie distincte des données, envisagez d'utiliser la mémoire partagée.

Mémoire partagée avec Numpy

Le multitraitement et Numpy peuvent être combinés pour partager des données efficacement :

<code class="python">import multiprocessing
import ctypes
import numpy as np

shared_array_base = multiprocessing.Array(ctypes.c_double, 10*10)
shared_array = np.ctypeslib.as_array(shared_array_base.get_obj())
shared_array = shared_array.reshape(10, 10)</code>
Copier après la connexion

Exemple de traitement parallèle

Au sein de la fonction exécutée par chaque processus, les modifications apportées au tableau partagé sont visibles par tous :

<code class="python">def my_func(i, def_param=shared_array):
    shared_array[i,:] = i</code>
Copier après la connexion

Conclusion

Le approprié Le mécanisme pour résoudre ce problème dépend des exigences spécifiques et des modèles d'accès de l'application. La mémoire partagée offre une approche efficace pour empêcher la duplication des données dans ce contexte, garantissant un accès partagé entre plusieurs 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