【发布时间】:2016-01-01 03:59:48
【问题描述】:
我是并行编程的新手。我的任务是分析数百个数据文件。这些数据中的每一个都接近 300MB,并且可以被分割成许多片。我的电脑是四核电脑。我想尽快得到每个数据的结果。
每个数据文件的分析包括 2 个过程。首先,将数据读入内存,然后将其切片,这是io密集型工作。然后,对该文件的切片进行大量计算,这是 cpu 密集型的。
所以我的策略是将这些文件分组为 4 个一组。对于这些文件的每一组,首先将 4 个文件的所有数据读取到内存中,其中包含 4 个内核中的 4 个进程。代码是这样的,
with Pool(processes=4) as pool:
data_list = pool.map(read_and_slice, files) # len(files)==4
然后对于data_list 中的每个data,使用4 个进程进行计算。
for data in data_list: # I want to get the result of each data asap
with Pool(processes=4) as pool:
result_list = pool.map(compute, data.slices) # anaylyze each slice of data
analyze(result_list) # analyze the results of previous procedure, for example, get the average.
然后去另一个小组。
所以问题是在数百个文件的整个计算过程中,池被重新创建了很多次。如何避免重新创建池和进程的开销?我的代码中是否存在大量内存开销?有没有更好的方法让我尽可能减少所需的时间?
谢谢!
【问题讨论】:
标签: python process parallel-processing multiprocessing