Introduction
L'utilisation des tableaux NumPy en mémoire partagée est essentielle pour la parallélisation des calculs en utilisant le module multitraitement. Cependant, accéder et manipuler des matrices de mémoire partagée en tant que matrices NumPy peut s'avérer difficile. Cet article explore une solution à ce problème.
Énoncé du problème
La création d'un tableau NumPy partagé accessible à partir de plusieurs processus nécessite l'utilisation du module multitraitement. Le défi réside dans l'activation d'opérations telles que la multiplication par éléments et la sommation de tableaux, qui sont intrinsèquement prises en charge par NumPy mais pas directement via les ctypes.
Solution
La clé de résoudre ce problème consiste à convertir le tableau ctypes représentant la mémoire partagée en un tableau NumPy. Pour y parvenir, nous utilisons la fonction frombuffer de NumPy. Le tableau NumPy résultant conserve son statut de mémoire partagée, permettant un accès transparent entre les processus.
Exemple
import multiprocessing as mp import numpy as np # Create a shared ctypes array shared_arr = mp.Array(ctypes.c_double, 10) # Convert the shared array to a NumPy array np_arr = np.frombuffer(shared_arr.get_obj()) # Perform operations on the NumPy array np_arr[0] = -np_arr[0] np_arr.sum()
Cette approche fournit les fonctionnalités des ctypes et de NumPy, vous permettant d'accéder et de manipuler la matrice de mémoire partagée avec la flexibilité de NumPy opérations.
Synchronisation
Bien que la conversion en tableau NumPy donne accès aux opérations NumPy, elle ne garantit pas un accès synchronisé. Si plusieurs processus tentent d'accéder simultanément à la mémoire partagée, cela peut entraîner des résultats inattendus. Pour éviter cela, un mécanisme de verrouillage doit être implémenté à l'aide de shared_arr.get_lock().
Notes supplémentaires
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!