python - 多处理对于磁盘 I/O 有用吗?

标签 python multiprocessing

想象一个简单的walk在存储设备(HDD、SSD、DVD 等)上完成。任务是将所有文件名索引到索引文件中。我们正在进行自顶向下的遍历,我相信,这可以并行化以提高性能。 This thread discusses the same issue ,但使用多线程而不是多处理。

然而,问题在于如何启动这样一个过程。由于目录具有树结构,因此我们无法预测哪个分支会比其他分支更长。

看一下这个目录树:

enter image description here

如果我从 project 文件夹开始并创建两个进程来遍历每个子文件夹,则其中一个进程将在遍历 sec1 文件夹后停止。它只是一个空文件夹,而另一个文件夹则有很多分支。这根本没有好处。有没有办法通过磁盘 I/O 多处理来克服此类问题。您能用可测试的示例代码来说明它吗?

最佳答案

由于您不知道树的平衡,因此没有合理的方法可以在处理器之间分配任务。

更重要的一点是,遍历 I/O 不是 CPU 密集型任务,而是 I/O 密集型任务。因此,增加更多的 CPU 马力不会对最终结果产生太大影响。

想象一下,您拥有最强大的超千兆赫兹 16 CPU 计算机可供使用,并且进一步walk 已针对多处理器进行了增强。

现在,您通过 USB 将 5400 RPM 1TB 硬盘连接到此设备,然后散步。

很明显,walk 的行走速度只能与磁盘旋转的速度一样快,因为这就是文件系统(和底层子系统)读取分区表以找出目录结构的速度。

但是,如果您在每个文件上执行 CPU 密集型任务(例如图像处理),那么程序的这一部分将受益于 CPU 性能的提高,但它将等待启动直到文件系统可以为其提供一些工作 - 现在您又回到了缓慢的 IO 问题。

关于python - 多处理对于磁盘 I/O 有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32031527/

相关文章:

python - Python自动解析数据

python - 使用 Python 程序的结果进行算术运算

python - PyTorch:如何编写仅返回权重的神经网络?

python - 使用多个工作进程时 Odoo/OpenERP 中的高空闲负载

Python 多处理 : Fastest way to signal an event to all processes?

python - 如何并行化行式 Pandas 数据框的 apply() 方法

C++ GDB Python pretty-print 教程?

python - 我如何使用 PRAW 列出 subreddit 中的热门评论?

python - 多处理。池 : What's the difference between map_async and imap?

python - input() 阻塞进程的使用