我有两个文件。文件A包含100万条记录。文件B包含大约2,000个字符串,每个字符串在单独的行上。
我有一个Python脚本,它依次获取文件B中的每个字符串,并在文件A中搜索匹配。逻辑如下:
For string in File B:
For record in File A:
if record contains string: # I use regex for this
write record to a separate file
这当前作为单个执行线程运行,需要几个小时才能完成。
我想实现并发来加速这个脚本。接近它的最佳方法是什么?我已经研究过多线程,但我的方案似乎并不代表生产者 - 消费者问题,因为我的机器有SSD,而I / O不是问题。多处理会有助于此吗?
使用多线程运行这样的问题会带来一些挑战:
我建议:
n
),并为他们每个人提供不同的1000000/n
记录。您要执行的处理需要检查1_000_000个记录中是否有2_000个字符串中的任何一个 - 这相当于2_000_000_000个“检查”总计。没有办法解决这个问题。你使用嵌套的for
循环的当前逻辑只是迭代两个文件中所有可能的事物组合 - 一个一个 - 并进行检查(和输出文件写入)。
您需要确定可以同时完成的方式(如果有的话)。例如,您可以执行“N”任务,每个任务检查每百万条记录中的一个字符串。所有这些任务的输出代表所需的输出,可能需要聚合在一起形成一个文件。由于结果将以相对随机的顺序排列,您可能还需要对其进行排序。