我在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)
现在,我关注的是,当多处理如何区分list_of_output_files的多处理时,(out.txt(中的输出文件是相同的,而我将它们作为最终输出文件将其串联到文件中。有建议吗?基本上,在上面的示例中,将文件分为3个文件(splited_input_file [](,并期待3个输出文件(list_of_output_files(,但是a中的路径是相同的(out.txt(,并且它们可能会在并行进程中访问和可能会弄乱或丢失一些数据。
您是否希望最终输出文件按顺序进行(即Splited_input_file [0] Splited_input_file1 Splited_input_file [2]之类的东西(?如果是这样,您可以定义一个函数,该函数将要编写的数据和输出文件名作为参数,然后将多处理运行3次使用不同的文件名来避免并行访问3个进程。p>要注意的另一件事是,您实际上可以使用线程比多处理更少的开销,因为这是一个I/O绑定过程(读取编写文件(,并为这些过程释放gil。