与python悲伤的酸洗问题

时间:2015-09-30 01:11:07

标签: python python-multiprocessing pathos

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多处理问题。但是我得到了一个酸洗错误:

  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

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

我是pathos作者。您收到了cPickle.PicklingError ... pathos不应该得到的内容。确保安装了multiprocess,如果安装,则确保安装了C ++编译器。您可以通过导入dill,在类中执行dill.copy(self.parse_DGN)或在外部使用类的实例来检查酸洗错误。如果可行,那么您可能会遇到一些安装问题,其中pathos正在查找python标准库multiprocessing。如果是这样,那么您可能需要安装编译器......如Microsoft Visual Studio社区。见:github.com/mmckerns/tuthpc。确保在安装MS编译器后重建multiprocess

答案 1 :(得分:2)

我遇到了同样的问题。神秘的是,相同的相同代码适用于1台win7机器,而不是另一台win7! 然后我检查了版本---结果莳萝和多进程在balky机器上高1版本。我将dill和multiprocess版本分别降为0.2.5和0.70.4。这解决了这个问题! 希望有所帮助