Es tut mir leid, dass ich den Fehler nicht mit einem einfacheren Beispiel reproduzieren kann, und mein Code ist zu kompliziert, um ihn zu posten. Wenn ich das Programm in der IPython-Shell anstelle des regulären Python ausführe, funktioniert es gut.
Ich habe einige frühere Notizen zu diesem Problem nachgeschlagen. Sie wurden alle durch die Verwendung von pool verursacht, um Funktionen aufzurufen, die innerhalb einer Klassenfunktion definiert sind. 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äre für jede Hilfe dankbar.
Update : Die Funktion I pickle ist auf der obersten Ebene des Moduls definiert. Allerdings ruft sie eine Funktion auf, die eine verschachtelte Funktion enthält, d.h, f()
ruft auf. g()
ruft auf. h()
die eine verschachtelte Funktion hat i()
und ich rufe an pool.apply_async(f)
. f()
, g()
, h()
sind alle auf der obersten Ebene definiert. Ich habe ein einfacheres Beispiel mit diesem Muster ausprobiert, und es funktioniert trotzdem.