处理多个文件时的并发性

问题描述 投票:0回答:2

我有两个文件。文件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不是问题。多处理会有助于此吗?

python multithreading
2个回答
0
投票

使用多线程运行这样的问题会带来一些挑战:

  • 我们必须遍历文件A中的所有记录才能完成算法。
  • 我们必须将写入同步到单独的文件,因此我们不会覆盖打印的记录。

我建议:

  1. 分配一个线程只是为了打印 - 所以外部文件不会搞砸。
  2. 打开as many threads as you can supportn),并为他们每个人提供不同的1000000/n记录。

0
投票

您要执行的处理需要检查1_000_000个记录中是否有2_000个字符串中的任何一个 - 这相当于2_000_000_000个“检查”总计。没有办法解决这个问题。你使用嵌套的for循环的当前逻辑只是迭代两个文件中所有可能的事物组合 - 一个一个 - 并进行检查(和输出文件写入)。

您需要确定可以同时完成的方式(如果有的话)。例如,您可以执行“N”任务,每个任务检查每百万条记录中的一个字符串。所有这些任务的输出代表所需的输出,可能需要聚合在一起形成一个文件。由于结果将以相对随机的顺序排列,您可能还需要对其进行排序。

© www.soinside.com 2019 - 2024. All rights reserved.