逐行读取文件——对磁盘的影响?
Reading a file line by line -- impact on disk?
我目前正在编写一个 python 脚本来处理非常大的 (> 10GB) 文件。由于无法将整个文件加载到内存中,我现在正在逐行读取和处理它:
for line in f:
....
脚本完成后,它会 运行 相当频繁,所以我开始考虑这种读取会对我的磁盘寿命产生什么影响。
脚本 实际上 会逐行读取还是会发生某种 OS 驱动的缓冲?如果不是,我应该自己实施某种中介缓冲区吗?经常撞击磁盘真的有害吗?我记得读过一些关于 BitTorrent 的文章,正是因为这种按位 reading/writing 而不是使用更大的数据块来操作,所以磁盘很快就会耗尽。
我在我的测试环境中同时使用 HDD 和 SSD,因此对于这两个系统的答案都很有趣。
出于性能原因,您的 OS 和 Python 都使用缓冲区读取较大块的数据。从 Python.
逐行读取文件不会对您的磁盘造成实质性影响
具体来说,Python 无法在不提前扫描以找到行分隔符的情况下为您提供单独的行,因此它将读取块,解析出单独的行,并且每次迭代都会从缓冲区中获取行直到另一个块必须阅读以找到下一组行。 OS 通常使用 buffer cache 来帮助加速 I/O。
我目前正在编写一个 python 脚本来处理非常大的 (> 10GB) 文件。由于无法将整个文件加载到内存中,我现在正在逐行读取和处理它:
for line in f:
....
脚本完成后,它会 运行 相当频繁,所以我开始考虑这种读取会对我的磁盘寿命产生什么影响。
脚本 实际上 会逐行读取还是会发生某种 OS 驱动的缓冲?如果不是,我应该自己实施某种中介缓冲区吗?经常撞击磁盘真的有害吗?我记得读过一些关于 BitTorrent 的文章,正是因为这种按位 reading/writing 而不是使用更大的数据块来操作,所以磁盘很快就会耗尽。
我在我的测试环境中同时使用 HDD 和 SSD,因此对于这两个系统的答案都很有趣。
出于性能原因,您的 OS 和 Python 都使用缓冲区读取较大块的数据。从 Python.
逐行读取文件不会对您的磁盘造成实质性影响具体来说,Python 无法在不提前扫描以找到行分隔符的情况下为您提供单独的行,因此它将读取块,解析出单独的行,并且每次迭代都会从缓冲区中获取行直到另一个块必须阅读以找到下一组行。 OS 通常使用 buffer cache 来帮助加速 I/O。