我想知道在我的 python 代码中是否有什么我可以做的,这使得i/o
磁盘更友好?
我知道,默认情况下,open()
使用启发式确定的缓冲区与磁盘的blocksize
.
据我了解,这仅确定何时将数据刷新到磁盘的缓存中。这样对吗?
我有以下场景:
我正在连接各种不断传输数据的 websocket。我需要将这些数据写入磁盘。最理想的是,我在接收和i/o
操作之间的延迟尽可能小,同时不会用i/o
命令来破坏我的磁盘。
我已经在使用单个线程来写入所有数据,而不是从各个线程中删除数据(正如这里所指出的)。但我想知道将缓冲区设置为除default
此处之外的任何其他内容是否有意义?
我意识到无论如何负载都会令人生畏,但我很好奇在为这种场景编写 python 代码时是否有任何磁盘友好的最佳实践。
目前,我只是这样做:
with open(file, 'wb') as f:
f.write("stuff")
但我想知道将缓冲区设置为除默认值之外的任何其他内容是否有意义?
它可能会 - 但您看到的任何性能改进都在很大程度上取决于您正在运行的系统 - 操作系统、文件系统、硬件,甚至数据在磁盘上的布局方式。因此,在创建、写入、修改和删除文件时,您的性能甚至可能强烈依赖于文件系统使用的过去历史记录。将存储从单个本地 5400-rpm SATA 驱动器更改为具有 15K-rpm SAS 驱动器的 RAID-6 阵列的 NAS 系统?您的答案可能会有所不同。
唯一真正知道的方法是在您计划使用它的系统上测试它。或者至少有一个尽可能相同。并且您需要使用与您的进程实际执行的 I/O 操作相同的模式进行测试。如果您的 I/O 模式是从随机位置进行小量读取,那么执行大量连续写入是没有意义的。
最后,除非您在一个实际设计用于处理您的特定 I/O 模式的系统上运行,否则您可能会得出结论,不值得付出努力进行所有测试。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句