【发布时间】:2011-01-28 08:29:50
【问题描述】:
有没有办法以操作系统不认为有必要将未写入的数据刷新到磁盘的方式中止 python 写入操作?
我正在将数据写入 USB 设备,通常为数兆字节。我在写入时使用 4096 字节作为我的块大小,但似乎 Linux 很早就缓存了一堆数据,然后慢慢将其写入 USB 设备。如果在写入过程中的某个时刻,我的用户决定取消,我希望应用程序立即停止写入。我可以看到数据停止从应用程序流出和 USB 活动指示灯停止闪烁之间存在延迟。几秒钟,通常最多约 10 秒钟。我发现该应用程序正在使用 close() 方法,我假设,等待操作系统完成写入缓冲数据。每次写入后我都会调用 flush() ,但这似乎对延迟没有任何影响。我已经搜索了 python 文档以寻找答案,但一无所获。
【问题讨论】:
-
这完全取决于操作系统和文件系统。 “正确”的行为(在正常的异步挂载下)是 close() 立即返回;如果您明确地使用 fdatasync(),它应该只等待刷新。您不太可能找到一种可移植的方式来改变这种行为,因为它会因系统而异。 (从 XP 左右开始,默认情况下,Windows 甚至根本不会将缓存写入 USB 驱动器。)
标签: python linux file-io flush