Python Fehler bei Multiprocessing?

KarlRanseierIII  10.03.2023, 20:55

Wie startest du das ganze?

theCPP 
Fragesteller
 11.03.2023, 08:28

Ich verwende meine Klasse, zuerst erstelle ich eine Instanz davon danach verwende ich die say Funktion.

KarlRanseierIII  11.03.2023, 19:31

Die Frage war eher, ob Du eien IDE nutzt, oder das direkt von der Kommandozeile aus startest.

theCPP 
Fragesteller
 11.03.2023, 20:03

ich starte mit CMD

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Du importierst yaml im Konstruktor der Klasse, sodaß das Modul Teil der Objektinstanz wird. Soll nun die Klasse gepickled werden, dann müßte auch yaml einem pickling unterzogen werden.

Die Fehlermeldung:

TypeError: cannot pickle 'module' object

besagt das Objekte vom Typ module nicht picklebar sind.

In dieser Zeile:

p = multiprocessing.Process(target=self.__speak__, args=(text, ))

gibst du an, dass die __speak__-Methode in einem anderen Prozess ausgeführt werden soll. Folglich muss auch das gesamte daranhängende Objekt (bzw. die Voice-Instanz) in diesen anderen Prozess verschoben werden.

Das geschieht üblicherweise über eine zwischenzeitliche Objektserialisierung mittels des pickle-Moduls. Da du aber im Stacktrace die Meldung:

TypeError: cannot pickle 'module' object

erhältst, muss man wohl davon ausgehen, dass dieser Vorgang fehlgeschlagen ist.

Ich würde vermuten, dass das engine-Property nicht serialisiert werden kann. Das kannst du ja auch einmal gegenprüfen.

Sofern ich damit richtig liege, wäre es wohl besser, das engine-Property erst innerhalb von __speak__ zu definieren.

theCPP 
Fragesteller
 11.03.2023, 08:29

Kann ich ja mal probieren.

0