如何在python中使用多处理从文件列表中构造数据



我有兴趣通过实现多处理来加快文件读取时间,但是我在从每个进程获取数据时遇到麻烦。当所有数据放在一起时,顺序很重要,而且我使用的是Python 3.9。

# read files from file list in the given indices
def read_files(files, folder_path):
raw_data = []
# loops through all tif files in the given folder and parses the data.
for file in files:
if file[-3:] == "tif":
curr_frame = Image.open(os.path.join(folder_path, file))
raw_data.append(np.array(curr_frame))
return np.asarray(raw_data).astype(np.float64)

def run_processes(folder_path=None):
if folder_path is None:
global PATH
folder_path = PATH
files = os.listdir(folder_path)
start = time.time()
processes = []
num_files_per = int(len(files) / os.cpu_count())
for i in range(os.cpu_count()):
processes.append(Process(target=read_files, args=(files[(i*num_files_per):((i+1)*num_files_per)], folder_path)))
for process in processes:
process.start()
for process in processes:
process.join()
end = time.time()
print(f"Multi: {end - start}")

任何帮助都非常感谢!

潜在地增加扩展,生成一个文件路径列表,并编写一个worker函数,该函数以单个路径作为参数并返回其数据。如果您将该worker与multiprocessing.Pool一起使用,它将为您处理返回数据的细节。

请记住,您正在用读取文件的时间来换取将数据返回给父进程的开销。不能肯定这是一个净改进。

然后是文件读取本身的问题。由于这些文件可能位于同一设备上,因此您可能会在这里遇到设备的最大吞吐量。

一般来说,如果您必须对图像进行的处理仅依赖于单个图像,那么在worker中进行处理可能是值得的,因为这会加快处理速度。

相关内容

  • 没有找到相关文章

最新更新