从Pool中检索和使用部分结果

时间:2017-06-14 02:47:01

标签: file-io multiprocessing

我有三个分别读取,处理和写入的函数。每个功能都经过优化(据我所知),可以独立工作。现在,我试图将每个函数的每个结果传递给链中的下一个结果,而不是等待整个列表。我不确定如何连接它们。这是我到目前为止所拥有的。

def main(files_to_load):
    loaded_files = load(files_to_load)
    with ThreadPool(processes=cpu_count()) as pool:
        proccessed_files = pool.map_async(processing_function_with_Pool, iterable=loaded_files).get()
    write(proccessed_files)

正如您所看到的,我的main()函数等待加载的所有文件(大约500Mb)将它们存储到内存中并将它们发送到processing_function_with_Pool(),后者将文件分成要处理的块。所有处理完成后完成后,文件将开始写入磁盘。我觉得这三个步骤之间有很多不必要的等待。我如何连接所有东西?

1 个答案:

答案 0 :(得分:0)

现在你的逻辑是按顺序读取所有文件(我猜)并将它们一次存储在内存中。

我建议您只发送一个包含要处理的文件名的列表。{/ p>

processing_function_with_Pool将负责阅读,处理文件并将结果写回来。

通过这种方式,您可以同时处理IO。

如果processing_function_with_Pool正在进行CPU限制工作,我建议你切换到一个进程池。