Мені шкода, що я не можу відтворити помилку більш простим прикладом, і мій код занадто складний для публікації. Якщо я запускаю програму в оболонці IPython замість звичайного Python, все виходить добре.
Я переглянув кілька попередніх записок щодо цієї проблеми. Всі вони були викликані використанням пулу для виклику функції, визначеної у функції класу. Але це не так для мене.
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
Буду вдячний за будь-яку допомогу.
Оновлення : Функція, яку я підбираю, визначається на верхньому рівні модуля. Хоча він називає функцію, яка містить вкладену функцію. тобто f()
називає g()
дзвінки, h()
які мають вкладену функцію i()
, і я дзвоню pool.apply_async(f)
. f()
, g()
, h()
Все визначені на рівні верхньої. Я спробував простіший приклад з цією схемою, і він працює.
dill
таpathos
. Однак мені не пощастило жодне з рішень під час роботи з vtkobjects :( Хтось встиг запустити python-код при паралельній обробці vtkPolyData?