我想知道按顺序读取文件与并行读取文件之间的权衡。
假设我想要处理一百万兆字节大小的文件,但没有足够的内存一次容纳所有这些文件。要按顺序处理这些,我可以这样做:
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 只是善良?编辑:搅拌机清除了第二个问题。谢谢,搅拌机!
谢谢您的帮助。