J'ai un SciPy Array (Matrix) de 60 Go que je dois partager entre plus de 5 multiprocessing
Process
objets. J'ai vu numpy-sharedmem et lu cette discussion sur la liste SciPy. Il semble y avoir deux approches - numpy-sharedmem
et utiliser a multiprocessing.RawArray()
et mapper NumPy dtype
s à ctype
s. Maintenant, numpy-sharedmem
semble être la voie à suivre, mais je n'ai pas encore vu un bon exemple de référence. Je n'ai besoin d'aucun type de verrou, car le tableau (en fait une matrice) sera en lecture seule. Maintenant, en raison de sa taille, j'aimerais éviter une copie. Il semble que la méthode correcte consiste à créer la seule copie du tableau sous forme de sharedmem
tableau, puis à la transmettre aux Process
objets? Quelques questions spécifiques:
Quelle est la meilleure façon de transmettre réellement les handles de sharedmem aux sous-groupes
Process()
? Ai-je besoin d'une file d'attente juste pour faire passer un tableau? Une pipe serait-elle meilleure? Puis-je simplement le passer comme argument à l'Process()
init de la sous-classe (où je suppose qu'il est décapé)?Dans la discussion que j'ai liée ci-dessus, il est question de
numpy-sharedmem
ne pas être sûr en 64 bits? J'utilise certainement des structures qui ne sont pas adressables 32 bits.Y a-t-il des compromis dans l'
RawArray()
approche? Plus lent, plus poussiéreux?Ai-je besoin d'un mappage ctype-to-dtype pour la méthode numpy-sharedmem?
Quelqu'un a-t-il un exemple de code OpenSource faisant cela? Je suis un expert très pratique et il est difficile de faire fonctionner cela sans aucun bon exemple à regarder.
S'il y a des informations supplémentaires que je peux fournir pour aider à clarifier cela pour les autres, veuillez commenter et j'ajouterai. Merci!
Cela doit fonctionner sur Ubuntu Linux et peut - être Mac OS, mais la portabilité n'est pas un problème majeur.
multiprocessing
à faire une copie de l'ensemble pour chaque processus.