Mehrfachverarbeitungsfehler: „Can't Pickle
Ihr Code stößt auf ein „ PicklingError:
Grundlegendes zur Beizhierarchie
Python Der Beizmechanismus ermöglicht die Serialisierung von Objekten in einen Bytestrom zur späteren Deserialisierung. Allerdings können nicht alle Objekte eingelegt werden picklable, wenn sie auf der obersten Ebene eines Moduls definiert sind. Dies liegt daran, dass die Pickle-Funktion Zugriff auf die Globals der Funktion erfordert, die nicht verfügbar sind, wenn sie innerhalb einer anderen Funktion oder Klasse definiert sind.
Die Situation Ihres Codes
Während Ihre Funktion auf der obersten Ebene definiert ist, ruft sie andere Funktionen auf, die möglicherweise keine Definitionen der obersten Ebene sind. Dadurch kann eine rekursive Abhängigkeit entstehen Das Beizen der Funktion der obersten Ebene ist unmöglich.
Eine Lösung: Verschieben Sie die Funktionsdefinition
Der Schlüssel zur Lösung des Problems besteht darin, sicherzustellen, dass die Funktion, die Sie verwenden Der Beizversuch wird auf der obersten Ebene des Moduls definiert. Verschieben Sie bei Bedarf die Funktionsdefinition außerhalb von Klassen oder anderen Funktionen.
Hier ist ein Beispiel:
# Original code class Foo: @staticmethod def work(self): pass # Updated code def work(foo): foo.work()
Zusammenfassung
Von Wenn Sie den Beizprozess und seine Grenzen verstehen, können Sie Fehler im Zusammenhang mit dem Beizen von Funktionen vermeiden. Denken Sie daran, Funktionen auf der obersten Ebene des Moduls zu definieren, um sicherzustellen, dass sie bei Verwendung von Multiprocessing erfolgreich ausgeführt werden.
Das obige ist der detaillierte Inhalt vonWarum kann ich meine Funktion im Multiprocessing nicht auswählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!