首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高效并行酸洗文件读取

高效并行酸洗文件读取
EN

Stack Overflow用户
提问于 2022-05-10 07:54:59
回答 1查看 207关注 0票数 1

我正在运行一个分析泡菜文件的程序,每个泡菜都应该转换成一个文本文件(我自己的格式)。

为了有效地做到这一点,我使用N (N是一个参数)运行并行python进程。每个进程只打开并读取单个文件,将其转换为文本并将其写入单独的目录(每个pkl文件被转换为唯一的文本文件)。

我使用N=multiprocessing.cpu_count() - 1在linux机器上运行。

pkl处理时间比预期的要长得多。总之,我正在分析100 K的pkl文件,每个文件大约1MB,大约需要一天。文本转换函数(to_txt())没有任何主要的计算,只是转换到字符串。

我怀疑这种低效率是因为我达到了磁盘I/O容量(通过在linux机器上检查top )。

关于如何提高效率,有什么想法吗?

每个过程的功能是:

代码语言:javascript
复制
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())
EN

回答 1

Stack Overflow用户

发布于 2022-05-10 08:08:19

就像这样

代码语言:javascript
复制
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)

这样,文件打开的时间不会太长,不能让其他进程处理文件打开/关闭的内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72182590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档