Python multiprocessing PicklingError: Can ' T pickle <type 'function'>

Tut mir Leid, dass ich den Fehler reproduzieren können mit einem einfacheren Beispiel, und mein code ist zu kompliziert, zu veröffentlichen. Wenn ich das Programm in der IPython-shell anstelle der regulären Python, alles klappt gut.

Ich sah einige der vorherigen Hinweise auf dieses problem. Sie waren alle durch die Verwendung von pool aufrufen, Funktion innerhalb einer Klasse definiert die Funktion. Aber dies ist nicht der Fall für mich.

Exception in thread Thread-3:
Traceback (most recent call last):
  File "/usr/lib64/python2.7/threading.py", line 552, in __bootstrap_inner
    self.run()
  File "/usr/lib64/python2.7/threading.py", line 505, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/usr/lib64/python2.7/multiprocessing/pool.py", line 313, in _handle_tasks
    put(task)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed

Ich würde jede Hilfe zu schätzen wissen.

Update: Die Funktion habe ich Gurke ist definiert, auf der obersten Ebene des Moduls. Wenn es eine Funktion aufgerufen, die enthält eine geschachtelte Funktion. ich.e f() Anrufe g() Anrufe h() hat eine verschachtelte Funktion i(), und ich rufe pool.apply_async(f). f(), g(), h() sind alle definiert, auf der obersten Ebene. Ich habe versucht, einfacheres Beispiel mit diesem Muster und es funktioniert obwohl.

  • Die top-level - / akzeptierte Antwort ist gut, aber es könnte bedeuten, dass Sie brauchen, um neu zu strukturieren Ihres Codes, das könnte schmerzhaft sein. Ich würde empfehlen, für jeden, der dieser Ausgabe Lesen Sie auch die weiteren Antworten Nutzung dill und pathos. Allerdings habe ich kein Glück mit irgendeiner der Lösungen beim arbeiten mit vtkobjects 🙁 Jemand hat es geschafft, führen Sie python-code in Parallelverarbeitung vtkPolyData?
InformationsquelleAutor CodeNoob | 2012-01-10
Schreibe einen Kommentar