加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

顺序或并行:在python中读取多个文件的正确方法是什么?

发布时间:2020-12-16 21:51:48 所属栏目:Python 来源:网络整理
导读:我想知道在顺序和并行读取文件之间的权衡. 假设我有一个百兆字节大小的文件,我想要处理,但没有足够的内存来同时保存所有这些文件.为了顺序处理这些,我可以这样做: results = [do_something(os.path.join(files,f)) for f in os.listdir(files)] 或者我可以

我想知道在顺序和并行读取文件之间的权衡.

假设我有一个百兆字节大小的文件,我想要处理,但没有足够的内存来同时保存所有这些文件.为了顺序处理这些,我可以这样做:

results = [do_something(os.path.join(files,f)) for f in os.listdir(files)]

或者我可以并行完成:

paths = [os.path.join(files,f) for f in os.listdir(files)]
p = multiprocessing.Pool()
try:
  results = p.map(do_something,paths)
  p.close()
  p.join()
except KeyboardInterrupt:
  p.terminate()

一般来说,我被警告不要执行并行I / O,因为随机磁盘读取速度很慢.但在这种情况下是平行的方式去?或者也许是一些混合策略?

另外,我注意到并行版本保留了目录的结构;也就是说,输出的顺序正确.这是否意味着它实际上是顺序执行,还是python只是善良?编辑:Blender清除了第二个问题.谢谢,搅拌机!

谢谢您的帮助.

最佳答案
如果每个文件有多个磁盘访问,则磁盘IO会损害并行处理.但是,如果您在do_something中执行的处理足够少,则可能不值得在线程池中进行上下文切换所需的处理.既然你说do_something非常昂贵,那么它可能值得并行处理.

此外,如果您只是将文件完全读入内存一次,而不是逐行读取文件,则可以最小化磁盘IO.当然这需要更多内存,但它可能会显着缩短处理时间.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读