python - 写入后中止缓慢刷新到磁盘?

标签 python linux file-io flush

有没有一种方法可以中止 python 写入操作,使操作系统认为没有必要将未写入的数据刷新到光盘?

我正在将数据写入 USB 设备,通常是许多兆字节。我在写入时使用 4096 字节作为我的 block 大小,但看起来 Linux 很早就缓存了一堆数据,然后慢慢地将其写入 USB 设备。如果在写入过程中的某个时刻,我的用户决定取消,我希望应用程序立即停止写入。我可以看到在数据停止从应用程序流出到 USB 事件指示灯停止闪烁之间存在延迟。几秒钟,通常最多约 10 秒。我发现应用程序在 close() 方法中,我假设等待操作系统完成写入缓冲数据。我在每次写入后调用 flush(),但这似乎对延迟没有任何影响。我搜索了 python 文档以寻找答案,但一无所获。

最佳答案

它在某种程度上依赖于文件系统,但在某些文件系统中,如果您在(全部)分配文件之前删除文件,则永远不会发生写入 block 的 IO。如果您截断它以便将仍在写入的部分切掉,这也可能是正确的。

如果您仍想访问数据,不确定是否真的可以中止写入。此外,支持此功能的文件系统类型(例如 xfs、ext4)通常不会在 USB 内存棒上使用。

如果要将数据刷新到光盘,请使用 fdatasync()。仅仅将 IO 库的缓冲区刷新到操作系统中不会实现任何物理刷新。

关于python - 写入后中止缓慢刷新到磁盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2458624/

相关文章:

linux - 在 Bourne Shell 中调用函数

java - 原子文件写入操作(跨平台)

perl - 如何在 Perl 中创建目录?

linux - 确定嵌入式设备上是否存在内存泄漏

linux - sed 读取没有换行的单行

c++ - 从文件发出阅读空间

python - 信念传播实现

python - Pandas 不根据条件选择列

python - 我可以使用复杂的键而不是字符串来访问 Django/Python 缓存解决方案

python - 何时何地以及如何更改对象的 __class__ attr?