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

前端之家收集整理的这篇文章主要介绍了顺序或并行:在python中读取多个文件的正确方法是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

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.当然这需要更多内存,但它可能会显着缩短处理时间.

猜你在找的Python相关文章