Господа, в этот праздничный день, помогите, пожалуйста, создать змея с многими головами! :)
file является гиперспектральным изображением (т.е. избражение, где каждый пиксель представляет собой спектр). hs - библиотека hyperspy для работы с этими изображениями. Функция multifit приближает каждый из спектров в пикселе при помощи функции войта. Так как файлов больше одного, а процессинг каждого занимает у моего компьютера примерно 2 минуты, я бы хотел это сделать сразу в несколько потоков. Есть вот такой код:
from multiprocessing import Pool
def fit_file(file):
image = hs.load(file).T
m = image.create_model()
v1 = hs.model.components1D.Voigt()
m.append(v1)
m.multifit()
return file, v1
with Pool(processes=4) as pool:
v = list(pool.map(fit_file, files[:2]))
В результате получаю:
---------------------------------------------------------------------------
MaybeEncodingError Traceback (most recent call last)
<timed exec> in <module>
/usr/lib/python3.7/multiprocessing/pool.py in map(self, func, iterable, chunksize)
266 in a list that is returned.
267 '''
--> 268 return self._map_async(func, iterable, mapstar, chunksize).get()
269
270 def starmap(self, func, iterable, chunksize=None):
/usr/lib/python3.7/multiprocessing/pool.py in get(self, timeout)
655 return self._value
656 else:
--> 657 raise self._value
658
659 def _set(self, i, obj):
MaybeEncodingError: Error sending result: '[('filename', <ZLP (Voigt component)>)]'. Reason: 'KeyError('__getstate__')'
Как я понимаю это связано сериализацией, но я не так хорошо разбираюсь в питоне чтобы решить эту проблему. Пробовал ещё ipython.parallel и Ray, но обычно сталкивался с такой же (ну или внешне похожей) проблемой. Всё это выполняется Jupyterlab.
Может кто-то подсказать что делать?