rho*_*ron 5 python io file-io multiprocessing
我想知道在顺序和并行读取文件之间的权衡.
假设我有一个百兆字节大小的文件,我想要处理,但没有足够的内存来同时保存所有这些文件.为了顺序处理这些,我可以这样做:
results = [do_something(os.path.join(files, f)) for f in os.listdir(files)]
Run Code Online (Sandbox Code Playgroud)
或者我可以并行完成:
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()
Run Code Online (Sandbox Code Playgroud)
一般来说,我被警告不要执行并行I/O,因为随机磁盘读取速度很慢.但在这种情况下是平行的方式去?或者也许是一些混合策略?
另外,我注意到并行版本保留了目录的结构; 也就是说,输出的顺序正确.这是否意味着它实际上是顺序执行,还是python只是善良?编辑: Blender清除了第二个问题.谢谢,搅拌机!
谢谢您的帮助.
这部分取决于它们所使用的存储介质的类型。由于寻道活动,传统硬盘驱动器几乎会停止运转。SSD,OTOH,不太容易受到随机读取的影响(尽管它并非完全不受影响)。
即使您有 SSD,您也可能会发现存在收益递减点,尽管默认池大小可能没问题,您甚至可能会发现最佳点远高于cpu_count(). 做出任何预测的因素太多,因此您应该尝试不同的池大小。