我正在使用apply_async()如下处理python脚本:
def my_proc(df, id):
# do something
return df
df = pd.read_csv(myfile, sep='\t', header=0, dtype=object)
p = multiprocessing.Pool(50)
ids = df['id'].tolist()
for i in range(len(ids))
result[id] = p.apply_async(my_proc, [df, ids[i]])
我遇到的问题是,如果数据帧大小变得非常大(200K行,75列),在任何给定时间仅运行一个进程,而其他所有进程均处于睡眠模式。
如果我将数据帧保存到一个csv文件中,并将csv文件名作为参数传递,并打开进程并读取csv,我会看到现在所有进程都保持运行,但是由于所有进程(其中50个进程)的性能变得不可接受)竞争打开相同的大型csv文件。
任何人都可以告诉我如何找出这些进程为何以及在何处被阻止。对替代性能解决方案有何建议?
编辑:
我正在使用Linux服务器。 我试图在下面的队列中传递df,但结果相同。我还返回了None并将进程数更改为3以找出问题所在:
def my_proc(q, id):
df = q.get()
# do something
return **None**
p = multiprocessing.Pool(**3**)
m = multiprocessing.Manager()
q = m.Queue()
df = pd.read_csv(report_file_dups, sep='\t', header=0, dtype=object)
q.put(df)
ids = df['id'].tolist()
for i in range(len(ids))
result[id] = p.apply_async(my_proc, [q, ids[i]])
我是否按预期使用队列?
答案 0 :(得分:0)
将文件送入队列,逐行读取并让工作人员使用队列中的数据怎么办?