Maison >développement back-end >Tutoriel Python >Les données partagées en lecture seule doivent-elles être copiées dans des environnements multitraitements ?

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

DDD
DDDoriginal
2024-10-25 06:12:291084parcourir

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>

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>

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!

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