J'ai une 60GO SciPy Tableau (Matrice), je dois le partager entre les 5+ multitraitement Processus d'objets. J'ai vu numpy-sharedmem et de lire cette discussion sur le SciPy liste. Il semble y avoir deux approches -numpy-sharedmem
et à l'aide d'un multiprocessing.RawArray()
et de la cartographie NumPy dtypes de ctypes. Maintenant, numpy-sharedmem semble être la voie à suivre, mais je n'ai pas encore de voir un bon exemple de référence. Je n'ai pas besoin de tout type de serrures, depuis le tableau (en fait une matrice) sera en lecture seule. Maintenant, en raison de sa taille, je voudrais éviter une copie. Il sonne comme de la bonne méthode est de créer une seule copie du tableau en tant que sharedmem
tableau, et ensuite de le passer au Processus d'objets? Un couple de questions précises:
Quelle est la meilleure façon de passer le sharedmem poignées de sous-
Process()
es? Ai-je besoin d'une file d'attente juste pour passer un tableau? Aurait un tuyau de mieux? Puis-je passer en argument à la Process() sous-classe init (où je suis en supposant que c'est marinés)?Dans la discussion que j'ai lié ci-dessus, il est question de numpy-sharedmem de ne pas être en 64 bits, coffre-fort? Je suis définitivement à l'aide de certaines structures qui ne sont pas 32 bits adressables.
Y sont compromis à l'
RawArray()
approche? Plus lent, buggier?Ai-je besoin ctype-à-dtype de cartographie pour la numpy-sharedmem méthode?
Quelqu'un aurait-il un exemple de code OpenSource faire cela? Je suis un très pratiques apprises et c'est difficile de faire ce travail sans aucune sorte de bon exemple à regarder.
Si il y a d'autres infos que je peux fournir pour aider à clarifier la situation pour les autres, s'il vous plaît commentaire et je vais l'ajouter. Merci!
Ce besoin de fonctionner sur Ubuntu Linux et Peut-être que Mac OS, mais la portabilité n'est pas une préoccupation majeure.