与Python pathos的腌制问题

1 人关注
import pathos.multiprocessing as mp
class Model_Output_File():
    Class to read Model Output files
    def __init__(self, ftype = ''):
        Constructor
        # Create a sqlite database in the analysis directory
        self.db_name = 'sqlite:///' + constants.anly_dir + os.sep + ftype + '_' + '.db'
        self.engine  = create_engine(self.db_name)
        self.ftype   = ftype
    def parse_DGN(self, fl):
        df      = pandas.read_csv(...)
        df.to_sql(self.db_name, self.engine, if_exists='append')
    def collect_epic_output(self, fls):
        pool = mp.ProcessingPool(4)
        if(self.ftype == 'DGN'):
            pool.map(self.parse_DGN, fls)
        else:
            logging.info( 'Wrong file type')
if __name__ == '__main__':
    list_fls = fnmatch.filter(...)
    obj = Model_Output_File(ftype = 'DGN')
    obj.collect_model_output(list_fls)

在上面的代码中,我使用pathos多处理库来避免类的python多处理问题。但是我得到了一个pickling错误。

  pool.map(self.parse_DGN, fls)
  File "C:\Anaconda64\lib\site-packages\pathos-0.2a1.dev0-py2.7.egg\pathos\multiprocessing.py", line 131, in map
    return _pool.map(star(f), zip(*args)) # chunksize
  File "C:\Anaconda64\lib\multiprocessing\pool.py", line 251, in map
    return self.map_async(func, iterable, chunksize).get()
  File "C:\Anaconda64\lib\multiprocessing\pool.py", line 567, in get
    raise self._value
cPickle.PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed

How do I fix this?

5 个评论
我是 pathos 的作者。 你得到了一个 cPickle.PicklingError ......而你不应该用 pathos 得到它。 你是否安装了 multiprocess ,如果安装了,你是否有一个C编译器? 你可以通过导入 dill ,并对对象进行 dill.copy ,来检查是否有腌制错误。 如果这样做了,那么你可能有一些安装问题, pathos 找到的是 multiprocessing 的标准库版本,而不是提供更好的序列化的分叉。
你会 dill.copy(self.parse_DGN) 。 所以,如果你发现python标准库 multiprocessing ,那么你可能需要安装一个编译器......比如Microsoft Visual Studio Community。 请看。 github.com/mmckerns/tuthpc
在安装了MS编译器之后,你是否重建了 multiprocess
好吧,这似乎很奇怪。 multiprocess 应该只是 pip install ,没有问题。 也许你可以在 multiprocess 的github页面上把这个问题作为一个票据发布? 这样的话,我就可以更好地诊断你的追踪问题了? 在没有看到回溯/构建输出的情况下,我唯一能想到的是,你的PYTHONPATH不正常。
酷。享受吧! 如果你发现你有进一步的问题,请随时提交一个票据。
python
python-multiprocessing
pathos
user308827
user308827
发布于 2015-09-30
2 个回答
Mike McKerns
Mike McKerns
发布于 2017-02-20
已采纳
0 人赞同