Maison >développement back-end >Tutoriel Python >Comment partager de grands tableaux en lecture seule et des objets Python en multitraitement sans surcharge de mémoire ?

Comment partager de grands tableaux en lecture seule et des objets Python en multitraitement sans surcharge de mémoire ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-03 20:19:03546parcourir

How to Share Large, Read-Only Arrays and Python Objects in Multiprocessing without Memory Overhead?

Objets de mémoire partagée en multitraitement

Question :

En multitraitement, comment pouvez-vous partager un grand fichier en lecture uniquement un tableau ou tout objet Python arbitraire sur plusieurs processus sans entraîner de surcharge de mémoire ?

Réponse :

Dans les systèmes d'exploitation qui utilisent la sémantique fork() de copie sur écriture, les structures de données inchangées restent disponibles pour tous les processus enfants sans consommation de mémoire supplémentaire. Assurez-vous simplement que l'objet partagé reste inchangé.

Pour les tableaux :

Approche efficace :

  1. Emballez le tableau dans une structure de tableau efficace (par exemple, tableau numpy).
  2. Placez le tableau dans la mémoire partagée.
  3. Enveloppez le tableau partagé avec multiprocessing.Array.
  4. Passez le tableau partagé tableau à vos fonctions.

Objets partagés inscriptibles :

  • Nécessite une synchronisation ou un verrouillage.
  • le multitraitement fournit deux méthodes :

    • Mémoire partagée : Convient aux valeurs simples, aux tableaux ou aux types de ctypes (rapide).
    • Proxy du gestionnaire : Le processus est conservé la mémoire, et un gestionnaire arbitre l'accès des autres (plus lent en raison de la sérialisation/désérialisation).

Objets Python arbitraires :

  • Utilisez l'approche proxy Manager.
  • Plus lent que la mémoire partagée en raison de la surcharge de communication.

Problèmes d'optimisation :

La surcharge observé dans l’extrait de code fourni n’est pas dû à une copie de la mémoire. Au lieu de cela, cela provient de la sérialisation/désérialisation des arguments de la fonction (le tableau arr), qui entraîne une pénalité de performances lors de l'utilisation du proxy Manager.

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