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 マルチプロセッシングの問題を回避しています。ただし、酸洗エラーが発生します:

  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

これを修正するにはどうすればよいですか?

4

2 に答える 2

3

私はpathos著者です。あなたはcPickle.PicklingError… を得ていますが、これは では得られませんpathosmultiprocessC++ コンパイラがインストールされていることを確認してください。をインポートしdilldill.copy(self.parse_DGN)クラス内で実行するか、クラスのインスタンスを外部で使用して、ピッキング エラーをチェックできます。それが機能する場合は、おそらくインストールの問題が発生している可能性がありますpathos.python標準ライブラリを見つける場所ですmultiprocessing。もしそうなら、Microsoft Visual Studio Community のようなコンパイラをインストールする必要があるでしょう。参照: github.com/mmckerns/tuthpcmultiprocessMS コンパイラのインストール後に必ず再構築してください。

于 2015-10-01T21:10:31.313 に答える
3

同じ問題が発生しました。謎は、同じ同一のコードが 1 つの win7 マシンで動作し、別の win7 マシンでは動作しないことです! 次に、バージョンを確認しました --- balky マシンでは、dill と multiprocess が 1 バージョン高いことがわかりました。dill と multiprocess をそれぞれ 0.2.5 と 0.70.4 にバージョンダウンしました。そして、それは問題を解決しました!それが役立つことを願っています

于 2017-02-20T04:25:06.040 に答える