Je tente de diffuser un module à d'autres processus python avec MPI. Bien sûr, un module lui-même n'est pas pickleable, mais le __dict__
est. Actuellement, je décapage le __dict__
et fait un nouveau module dans le processus de réception. Cela a fonctionné parfaitement avec certains modules simples et personnalisés. Cependant, quand j'essaye de faire ceci avec NumPy, il y a une chose que je ne peux pas prendre facilement: le ufunc
.Aider à décaper un ufunc?
J'ai lu ce fil qui suggère décaper la __name__
et __module__
du ufunc
, mais il semble qu'ils se fondent sur numpy avoir entièrement construit et présente avant la reconstruire. Je dois éviter d'utiliser l'instruction import
dans le processus de réception, donc je suis curieux de savoir si l'instruction getattr(numpy,name)
mentionnée fonctionnerait avec un module qui n'a pas encore ufunc
inclus.
En outre, je ne vois pas un attribut __module__
sur la ufunc
dans la documentation NumPy: http://docs.scipy.org/doc/numpy/reference/ufuncs.html
Toute aide ou suggestion, s'il vous plaît?
EDIT: Désolé, j'ai oublié d'inclure le fil mentionné ci-dessus. http://mail.scipy.org/pipermail/numpy-discussion/2007-January/025778.html
Les processus de réception n'importent réellement rien parce que je ne fais que décoder le '__dict__' d'un module via la fonction' bcast' dans MPI (' mpi4py'). Et puis je crée un module vide dans lequel j'insère le '__dict__'. Je vais le faire fonctionner avec mon interprète de débogage pour voir s'il importe vraiment quelque chose comme vous le suggérez. Le but de ce que j'essaie de faire est d'essayer d'empêcher les processus de réception d'avoir à accéder au système de fichiers tout en important le module. – Tim
Les importations se produisent dans 'pickle.load', que mpi4py appelle - ce que vous n'avez pas le contrôle. (Si vous êtes intéressé, vous pouvez vérifier comment fonctionne le décapage: http://hg.python.org/cpython/file/tip/Lib/pickle.py#l1067 ou simplement vérifier le flux de pickle) Si vous voulez passer le code sur le fil contournant le système de fichiers, c'est possible (mais peut-être vous devriez déposer une question distincte pour cela ici) - soit passer le code Python comme dans une chaîne et le compiler avec exec de l'autre côté, soit compiler à un objet de code et le transmettre. Cependant, vous ne pouvez pas copier Numpy comme ceci. –