2017-12-07 18 views
1

this answerによれば、複数の引数を持つマルチプロセッシングの場合はstarmapを使用する必要があります。私が抱えている問題は、私の議論の1つが、一定のデータフレームであるということです。関数とstarmapで使用する引数のリストを作成すると、データフレームは何度も繰り返し格納されます。私はnamespaceを使ってこの問題を回避することができましたが、それを理解できないようです。以下のコードはエラーを投げていませんが、30分後にはファイルが書き込まれません。コードはマルチプロセッシングを使わずに直接write_fileを呼び出して10分以内で実行されます。この問題に苦しんで誰にもデータフレームと複数の引数を持つPythonマルチプロセッシング

import pandas as pd 
import numpy as np 
import multiprocessing as mp 

def write_file(df, colIndex, splitter, outpath): 
    with open(outpath + splitter + ".txt", 'a') as oFile: 
     data = df[df.iloc[:,colIndex] == splitter] 
     data.to_csv(oFile, sep = '|', index = False, header = False) 

mgr = mp.Manager() 
ns = mgr.Namespace() 
df = pd.read_table(file_, delimiter = '|', header = None) 
ns.df = df.iloc[:,1] = df.iloc[:,1].astype(str) 
fileList = list(df.iloc[:, 1].astype('str').unique()) 
for item in fileList: 
    with mp.Pool(processes=3) as pool: 
     pool.starmap(write_file, np.array((ns, 1, item, outpath)).tolist()) 
+0

ソリューションを見つけましたか? –

+0

以下の回答を参照してください –

答えて

0

、私の解決策を介して、データフレームのうち、長チャンクのタプルの反復可能なリストを作成することでした:Starmapのこの反復可能に合格し、その後

iterable = product(np.array_split(data, 15), [args]) 

pool.starmap(func, iterable) 
関連する問題