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())
ソリューションを見つけましたか? –
以下の回答を参照してください –