我有一个文件打开写入,一个进程运行了几天 - 在相对随机的时刻写入文件。我的理解是 - 直到我做file.close() - 有可能没有真正保存到磁盘。这是真的吗?

如果系统在主进程尚未完成时崩溃怎么办?是否有一种方法可以做一次提交...说 - 10分钟(我自己称之为提交 - 不需要运行计时器)? file.close()和open(文件,'a')是唯一的方法,还是有更好的选择?

有帮助吗?

解决方案

您应该可以使用 file.flush()来执行此操作。

其他提示

如果您不想杀死当前进程以添加 f.flush()(听起来它已经运行了几天?),您应该没问题。如果您看到要写的文件越来越大,那么您将不会丢失该数据......

来自Python文档:

  

<强>写(STR)       将字符串写入文件。没有回报价值。由于缓冲,   字符串可能实际上不会出现   文件直到flush()或close()   方法被称为。

听起来Python的缓冲系统会自动刷新文件对象,但在发生这种情况时无法保证。

要确保您的数据已写入磁盘,请使用 file.flush(),然后使用 os.fsync(file.fileno())

正如已经说过的,使用.flush()方法强制写出缓冲区,但是避免使用大量的flush调用,因为这实际上会减慢你的写入速度(如果应用程序依赖于快速写入)因为你将强制你的文件系统写出小于它的缓冲区大小的变化,这可能会让你跪倒在地。 :)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top