gpt4 book ai didi

Python:使用多处理池时使用队列写入单个文件

转载 作者:太空狗 更新时间:2023-10-29 17:22:20 31 4
gpt4 key购买 nike

我有成百上千个文本文件,我想以各种方式对其进行解析。我想将输出保存到一个没有同步问题的文件中。为了节省时间,我一直在使用多处理池来执行此操作,但我不知道如何将 Pool 和 Queue 结合起来。

以下代码将保存文件名以及文件中连续“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()

最佳答案

多处理池为您实现了一个队列。只需使用将工作程序返回值返回给调用者的池方法即可。 imap 运行良好:

import multiprocessing 
import re

def mp_worker(filename):
with open(filename) as f:
text = f.read()
m = re.findall("x+", text)
count = len(max(m, key=len))
return filename, count

def mp_handler():
p = multiprocessing.Pool(32)
with open('infilenamess.txt') as f:
filenames = [line for line in (l.strip() for l in f) if line]
with open('results.txt', 'w') as f:
for result in p.imap(mp_worker, filenames):
# (filename, count) tuples from worker
f.write('%s: %d\n' % result)

if __name__=='__main__':
mp_handler()

关于Python:使用多处理池时使用队列写入单个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26596714/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com