Ошибка cPickle при использовании pathos.multiprocessing?

Я пытаюсь использовать многопроцессорность, чтобы ускорить чтение pandas excel. Однако, когда я использую многопроцессорную обработку, я получаю сообщение об ошибке cPickle.PicklingError: Can't pickle: поиск атрибута __builtin__.function failed

когда я пытаюсь запустить следующее: import dill from pathos.multiprocessing import ProcessPool

class A(object):
    def __init__(self):
        self.files = glob.glob(\*)

    def read_file(self, filename):
        return pd.read_excel(filename)

    def file_data(self):
        pool = ProcessPool(9)
        file_list = [filename for filename in self.files]
        df_list = pool.map(A().read_file, file_list)
        combined_df = pd.concat(df_list, ignore_index=True)

Разве pathos.multiprocessing не предназначен для решения этой проблемы? Я что-то упускаю из виду?

Изменить: полный код ошибки отслеживается до

File "c:\users\zky3sse\appdata\local\continuum\anaconda2\lib\site-packages\pathos-0.2.0-py2.7.egg\
pathos\multiprocessing.py", line 136, in map
return _pool.map(star(f), zip(*args)) # chunksize
  File "C:\Users\ZKY3SSE\AppData\Local\Continuum\Anaconda2\lib\multiprocessing\pool.py", line 251, in map
return self.map_async(func, iterable, chunksize).get()
  File "C:\Users\ZKY3SSE\AppData\Local\Continuum\Anaconda2\lib\multiprocessing\pool.py", line 567, in get
raise self._value

person boson    schedule 31.10.2016    source источник
comment
Похоже, вы работаете в Windows, и если вы не использовали заморозку_поддержки, вы можете получить эту загадочную ошибку. Если вы можете опубликовать некоторый тестовый код, демонстрирующий вашу ошибку, который другие люди могут легко запустить, вы можете получить более полный ответ, демонстрирующий работающий код.   -  person Mike McKerns    schedule 17.11.2016


Ответы (1)


Вполне возможно, что Pandas может использовать Swig в качестве оболочки для кода C. Если это так, то укроп может не работать должным образом, а пафос тогда переключится на рассол. Существуют обходные пути, как показано здесь: Как сделать мой Модуль расширения SWIG работает с Pickle?

person MauricioRoman    schedule 31.10.2016
comment
Есть ли способ проверить, использует ли pandas swig? - person boson; 01.11.2016
comment
Я попробовал ссылку, но это, похоже, не решило проблему - person boson; 02.11.2016