我正在运行一个分析泡菜文件的程序,每个泡菜都应该转换成一个文本文件(我自己的格式)。
为了有效地做到这一点,我使用N (N是一个参数)运行并行python进程。每个进程只打开并读取单个文件,将其转换为文本并将其写入单独的目录(每个pkl文件被转换为唯一的文本文件)。
我使用N=multiprocessing.cpu_count() - 1在linux机器上运行。
pkl处理时间比预期的要长得多。总之,我正在分析100 K的pkl文件,每个文件大约1MB,大约需要一天。文本转换函数(to_txt())没有任何主要的计算,只是转换到字符串。
我怀疑这种低效率是因为我达到了磁盘I/O容量(通过在linux机器上检查top )。
关于如何提高效率,有什么想法吗?
每个过程的功能是:
from pathlib import Path
from typing import cast
def analyze(pkl_path: Path):
with pkl_path.open("rb") as pkl_file:
results = cast(Results, pickle.load(pkl_file))
with pkl_path.with_suffix(".txt").open("w") as txt_file:
txt_file.write(results.to_txt())发布于 2022-05-10 08:08:19
就像这样
def analyze(pkl_path: Path):
with pkl_path.open("rb") as pkl_file:
file = pickle.load(pkl_file)
results = cast(Results,file)
inTxt = results.to_txt()
with pkl_path.with_suffix(".txt").open("w") as txt_file:
txt_file.write(inTxt)这样,文件打开的时间不会太长,不能让其他进程处理文件打开/关闭的内容。
https://stackoverflow.com/questions/72182590
复制相似问题