Skip to main content
 首页 » 编程设计

python之python pathos 的酸洗问题

2025年05月04日16zhwl

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 

我该如何解决这个问题?

请您参考如下方法:

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