j'ai un objet pythonobjets python diffusion à l'aide mpi4py
<GlobalParams.GlobalParams object at 0x7f8efe809080>
qui contient divers tableaux numpy, les valeurs des paramètres etc. que j'utilise dans diverses fonctions d'appel comme par exemple:
myParams = GlobalParams(input_script) #reads in various parameters from an input script and assigns these to myParams
myParams.data #calls the data array from myParams
I Je suis en train de paralléliser mon code et j'aimerais diffuser l'objet myParams
afin qu'il soit disponible pour les autres processus fils. Je l'ai fait précédemment pour les tableaux individuels numpy, les valeurs, etc., sous la forme:
points = comm.bcast(points, root = 0)
Cependant, je ne veux pas avoir à le faire individuellement pour tout le contenu de myParams
. Je voudrais diffuser l'objet dans son intégralité afin qu'il puisse être consulté sur d'autres cœurs. J'ai essayé l'évidence:
myParams = comm.bcast(myParams, root=0)
mais renvoie l'erreur:
myParams = comm.bcast(myParams, root=0)
File "MPI/Comm.pyx", line 1276, in mpi4py.MPI.Comm.bcast (src/mpi4py.MPI.c:108819)
File "MPI/msgpickle.pxi", line 612, in mpi4py.MPI.PyMPI_bcast (src/mpi4py.MPI.c:47005)
File "MPI/msgpickle.pxi", line 112, in mpi4py.MPI.Pickle.dump (src/mpi4py.MPI.c:40704)
TypeError: cannot serialize '_io.TextIOWrapper' object
Quelle est la bonne façon de partager cet objet avec les autres noyaux? C'est probablement une exigence courante dans python, mais je ne trouve aucune documentation à ce sujet. La plupart des exemples concernent la diffusion d'une seule variable/matrice.