Pickling Fehler
Verfasst: Donnerstag 13. Februar 2014, 17:32
Hallo liebe Community,
als Python-Anfänger stolper ich immer wieder über vermeintlich banale Probleme wie das Folgende.
Ich benutze die library mpi4py um mein script zu parallelisieren. Zum Glück ist die library relativ benutzerfreundlich und auch gut dokumentiert. Leider nutzt sie (wie ich das verstanden habe) 'pickle' für die Kommunikation zwischen den Prozessoren. Nun ist es jedoch so, dass sich nur bestimmte Datentypen 'picklen' lassen. Ein Workaround um z.B. Funktionen zu verschicken habe ich bereits auf stackoverflow gefunden. Leider habe ich das nicht so richtig verstanden und zum Thema module verschicken gibt es gar nichts im Netz. Um mein Problem zu veranschaulichen, hier ein kleines Beispiel:
Resultat:
Hat jemand eine Idee wie ich das zum laufen kriege oder wenigstens wie ich das Problem umgehen könnte? In C würde ich statt dem Objekt mlab in so einem Fall einfach den Zeiger auf dieses Objekt übergeben. So könnte ich von jedem Prozessor aus auf dasselbe 'mlab' zugreifen. Geht das auch irgendwie mit Python?
als Python-Anfänger stolper ich immer wieder über vermeintlich banale Probleme wie das Folgende.
Ich benutze die library mpi4py um mein script zu parallelisieren. Zum Glück ist die library relativ benutzerfreundlich und auch gut dokumentiert. Leider nutzt sie (wie ich das verstanden habe) 'pickle' für die Kommunikation zwischen den Prozessoren. Nun ist es jedoch so, dass sich nur bestimmte Datentypen 'picklen' lassen. Ein Workaround um z.B. Funktionen zu verschicken habe ich bereits auf stackoverflow gefunden. Leider habe ich das nicht so richtig verstanden und zum Thema module verschicken gibt es gar nichts im Netz. Um mein Problem zu veranschaulichen, hier ein kleines Beispiel:
Code: Alles auswählen
from mpi4py import MPI
from tvtk.api import tvtk
from mayavi import mlab
comm=MPI.COMM_WORLD
size=comm.Get_size()
rank=comm.Get_rank()
if rank==0:
from tvtk.api import tvtk
from mayavi import mlab
if __name__=='__main__':
mlab=comm.bcast(mlab,root=0) Code: Alles auswählen
cPickle.PicklingError: Can't pickle <type 'module'>: attribute lookup __builtin__.module failed