Heim > Backend-Entwicklung > Python-Tutorial > Wie löst man den „PicklingError: Can't pickle' von Python Multiprocessing?

Wie löst man den „PicklingError: Can't pickle' von Python Multiprocessing?

DDD
Freigeben: 2024-12-15 08:24:10
Original
885 Leute haben es durchsucht

How to Solve Python Multiprocessing's

PicklingError in Python Multiprocessing

Bei der Verwendung von Python Multiprocessing kann es zu einem „PicklingError: Pickle : Attributsuche __builtin__.function fehlgeschlagen“ Fehler. Dies tritt auf, wenn Sie versuchen, eine Funktion an einen Arbeitsprozess zu senden, die Funktion jedoch nicht auf der obersten Ebene eines Moduls definiert ist.

Problem mit verschachtelten Funktionen

In In Ihrem speziellen Fall kann der Fehler dadurch verursacht werden, dass die Funktion, die Sie auswählen, eine verschachtelte Funktion aufruft. Obwohl die äußere Funktion f() auf der obersten Ebene definiert ist, versucht die Mehrfachverarbeitung, die verschachtelte Funktion auszuwählen, und schlägt fehl, wenn sie eine Funktion g() aufruft, die eine verschachtelte Funktion h() enthält.

Lösung

Um dieses Problem zu beheben, verschieben Sie die Funktion, die Sie auswählen möchten, auf die oberste Ebene des Moduls. Alternativ können Sie eine separate Funktion auf der obersten Ebene erstellen, die die verschachtelte Funktion aufruft, und stattdessen diese Funktion auswählen.

Zum Beispiel:

# Original code
def f():
    g()

def g():
    h()

# Corrected code
def f():
    wrapper_function()

def wrapper_function():
    g()
    h()
Nach dem Login kopieren

Durch die Definition von wrapper_function() auf der obersten Ebene und wenn Sie es einlegen, können Sie den Beizfehler vermeiden.

Zusätzlich Überlegungen

  • Das Auswählen von Lambda-Funktionen und Funktionszeigern wird nicht unterstützt.
  • Funktionen, die auf nicht auswählbare Objekte wie Dateihandles oder Datenbankverbindungen zugreifen, können nicht auswählbar sein.
  • Im Allgemeinen empfiehlt es sich, Funktionen auf der obersten Ebene eines Moduls zu definieren, wenn Sie diese verwenden möchten Mehrfachverarbeitung.

Das obige ist der detaillierte Inhalt vonWie löst man den „PicklingError: Can't pickle' von Python Multiprocessing?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage