我有几十万个文本文件,我想以各种方式进行解析。我想将输出保存到单个文件而没有同步问题。我一直在使用多处理池来节省时间,但我无法弄清楚如何组合Pool和Queue。Python:在使用多处理时使用队列写入单个文件池
以下代码将保存infile名称以及文件中连续“x”的最大数目。但是,我希望所有进程都将结果保存到同一个文件中,而不是像我的示例中那样保存到不同的文件中。任何帮助,将不胜感激。
import multiprocessing
with open('infilenamess.txt') as f:
filenames = f.read().splitlines()
def mp_worker(filename):
with open(filename, 'r') as f:
text=f.read()
m=re.findall("x+", text)
count=len(max(m, key=len))
outfile=open(filename+'_results.txt', 'a')
outfile.write(str(filename)+'|'+str(count)+'\n')
outfile.close()
def mp_handler():
p = multiprocessing.Pool(32)
p.map(mp_worker, filenames)
if __name__ == '__main__':
mp_handler()
因此,我循环遍历一个结果,并将它们写入文件,因为它们进来?这是否意味着新员工在每个“结果”写完之前都不会启动,或者每次都运行,但是会等待写入? 另外,你能解释为什么你用[line for line in(l.strip()for f in line)替换我的f.read()。splitlines()如果line]? – risraelsen 2014-10-28 01:04:29
32个进程在后台运行,并在“块”中获取更多文件名,因为它们会将结果传递回父进程。结果会立即传回,以便母公司并行执行其工作。一行一行地读取文件比一次读取文件并稍后拆分文件更有效率......这就是列表的目的。 – tdelaney 2014-10-28 02:15:08
最佳答案/ example – zach 2014-12-11 20:46:09