【问题标题】:Multicore processing of multiple files and writing to a shared output file多个文件的多核处理并写入共享输出文件
【发布时间】:2017-08-15 09:38:21
【问题描述】:

所以,我有大约 30 个文件,每个文件大小为 1 GB,我在具有 16 GB RAM 和 4 个 CPU 内核的 MAC 上按顺序读取它们。它们中的每一个的处理都是独立于其他的。完成处理大约需要 2 个小时。每个文件都有一天的数据(时间序列/24 小时)。所以有30天的数据。处理后,我每天将输出附加到文件中(即第 1 天、第 2 天等)。

我可以使用多处理来解决这个问题吗?它有任何副作用(如抖动等)吗?如果有人能在模式上指导我,那就太好了。我阅读了有关多进程、池和 imap 的信息,但我仍然不清楚如何按顺序写入文件(即按天写入)。

我的方法(以下任意一种):

  1. 使用 imap 获取我正在寻找的有序输出。 或
  2. 为每个输入文件编写单独的输出文件,然后通过排序将它们合并为一个。

有没有更好的模式来解决这个问题?我需要在这里使用队列吗?糊涂了!

【问题讨论】:

    标签: python multiprocessing file-processing


    【解决方案1】:

    方法二的基本演示:

    from concurrent.futures import ProcessPoolExecutor
    
    executor = ProcessPoolExecutor(max_workers=10)
    
    inputs = ['a.input.txt', ]
    outputs = ['a.output.txt', ]
    
    
    def process(input, output):
        """ process one file at a time."""
        pass
    
    
    def merge(files):
        """ merge all output files. """
        pass
    
    for i in range(len(inputs)):
        executor.submit(process, inputs[i], outputs[i])
    
    merge(outputs)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 2013-08-19
      相关资源
      最近更新 更多