与不同的输入文件和不同的输出文件并行运行相同的功能

时间:2019-07-04 00:28:32

标签: python io multiprocessing

我在python中有一个方法,该方法将一个大文件作为输入并返回一个文件作为输出。

我想使用多处理(池)来并行化进程。为此,我将输入文件拆分为3个较小的文件。

我的方法:

     def A(self, input_file):
         ....
         ....
         ....
         output_file = out.txt #(path to output file)
         ....
         ....
         output_file = do_smth(input_file)
         return output_file

我想通过多处理获得性能的方式:

         splited_input_file = split_file(input_file)
         p = Pool(5)
         list_of_output_files = p.map(A, splited_input_file[0], splited_input_file[1], splited_input_file[2])
         output_file = concatenate_files(list_of_output_files)

现在,我担心的是,当多重处理运行时,A(out.txt)中的输出文件是相同的,因此如何区分list_of_output_files,并将它们连接成一个文件作为最终输出文件。有什么建议吗?基本上,在上面的示例中,文件分为3个文件(splited_input_file []),并且还期望有3个输出文件(list_of_output_files),但A中的路径相同(out.txt),它们可能在并行进程中被访问,并且可能会弄乱或丢失一些数据。

1 个答案:

答案 0 :(得分:0)

您是否要使最终输出文件井井有条(例如,诸如splitted_input_file [0] + splited_input_file 1 + splited_input_file [2]之类的东西)?如果是这样,则可以定义一个函数,该函数将要写入的数据和输出文件名作为参数,然后让多进程以不同的文件名运行3次,以避免3个进程并行访问同一文件。

要注意的另一件事是,与多处理相比,您实际上可以使用threads来节省开销,因为这是一个受I / O约束的进程(读取写入文件),而python为此释放了GIL。