我有成千上万的文本文件,希望通过各种方式进行解析。我想将输出保存到单个文件而不会出现同步问题。我一直在使用多处理池来节省时间,但是我不知道如何结合使用池和队列。
以下代码将保存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()
多处理池为您实现了一个队列。只需使用将工作程序返回值返回给调用方的池方法即可。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中的多处理库中使用队列。执行下面的代码后(打印语句起作用),但是在调用Queue上的join之后,这些进程没有退出,并且仍然存在。我如何终止其余过程? 谢谢! 问题答案: 尝试这个:
问题内容: 我有一个带有HornetQ的JBoss-6服务器和一个队列: 有一个不同的消费者(在不同的机器)连接到这个队列中,但只有一个 单一的 消费者是活动的时间。如果我关闭此使用者,则消息将立即由其他使用者之一处理。 由于我的消息需要一些耗时的处理,因此我希望多个使用者同时处理其唯一消息。 我记得在早期版本的JBoss中也有类似的情况,该设置可以正常工作。在Jboss-6中,消息传递系统运行良
问题内容: 我想使用multiprocessing.Pool,但是multiprocessing.Pool不能在超时后中止任务。我找到了解决方案,并对其进行了一些修改。 主要修改-使用 sys.exit(1) 退出工作进程。它杀死了工作进程并杀死了工作线程,但是我不确定这个解决方案是否很好。当进程因正在运行的作业而终止时,我会遇到哪些潜在的问题? 问题答案: 停止正在运行的作业没有隐含的风险,操作
问题内容: 等待(不旋转)直到两个(多处理)队列中的任何一个都可用的最佳方法是什么(两者都驻留在同一系统上)? 问题答案: 似乎还没有一种正式的方式来解决这个问题。或至少不是基于此: http://bugs.python.org/issue3831 您可以尝试类似本文所进行的操作-访问基础管道文件句柄: http://haltcondition.net/?p=2319 然后使用选择。
我有一个图像路径列表,我想在进程或线程之间划分,以便每个进程处理列表的某些部分。处理包括从磁盘加载图像,进行一些计算并返回结果。我正在使用Python 2.7 下面是我如何创建辅助进程 我所面临的问题是,当我在initializer函数中记录初始化时间时,我知道worker不是并行初始化的,而是每个worker都以5秒的间隔初始化,下面是供参考的日志 我尝试过使用将同时启动辅助线程 我知道Wind
按预期更正代码:从多处理导入池导入信号导入时间导入操作系统 ================================================== 我发现了问题,当我使用map函数时,主func被阻塞,只有map函数被funish时才会调用信号处理程序。所以,使用"map_async"函数来解决这个问题要好得多。 以下是我的发现: 纯用C语言实现的长时间运行的计算(例如对大量文本进行