根据this answer,应该使用多个参数starmap进行多处理。我遇到的问题是我的一个论点是一个不变的数据帧。当我创建一个由我的函数和星图使用的参数列表时,数据帧会一遍又一遍地存储。我虽然可以使用namespace解决这个问题,但似乎无法解决这个问题。我的代码下面没有抛出错误,但30分钟后没有写入任何文件。代码运行时间不到10分钟,不使用多处理,只需直接调用write_file
。
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)
对于其他任何正在努力解决此问题的人,我的解决方案是通过以下方式从数据框中创建一个长度为chunksize的元组的可迭代列表:
iterable = product(np.array_split(data, 15), [args])
然后,将此迭代传递给starmap:
pool.starmap(func, iterable)