Seite 1 von 1

Das altbekannte Pickelproblem unter Windows

Verfasst: Mittwoch 5. Oktober 2011, 11:18
von anogayales
Hallo liebe Community,

ich bin auf ein Problem gestoßen, das wahrscheinlich schon des öfteren gelöst wurde. Nun benötige ich eure Hilfe. Ich habe eine Klasse, die das multiprocessing Modul verwendet. In dieser Klasse wird eine anonyme Funktion definiert und als target registriert. Hier der entsprechende Codeauszug:

Code: Alles auswählen

                def reader():
                        while True:
                                packet = self._collect()
                                if self._reader_end.poll():
                                        self._reader_end.recv()
                                        self._reader_end.send(packet)

                self._reader = multiprocessing.Process(target = reader)
Beim Pickeln gibt es nun aber Probleme. Ich bekomm die Fehlermeldung, dass die Funktion nicht gepickelt werden kann, da sie nicht unter Klassenname.reader gefunden werden kann. Auch wenn ich die Funktion unter dem angegeben Name hinterlege bekomme ich ein EOFError.

Code: Alles auswählen

pickle.PicklingError: Can't pickle : it's not found as Klassenname.reader
Grüße,
anogayales

Re: Das altbekannte Pickelproblem unter Windows

Verfasst: Mittwoch 5. Oktober 2011, 20:02
von BlackJack
@anogayales: Das sollte unabhängig von Windows sein. Pickle serialisiert keine Code-Objekte sondern nur den Namen. Das bedeutet unter dem Namen muss beim entpicklen dann auch wieder ein Funktionsobjekt existieren.